我有一张带有相应listing_id 和位置的图像表。
image_name、listing_id、位置
- 每个listing_id 可以有多个图像。
- 每个图像都有一个表示显示顺序的整数位置
如果listing_id 在位置1 没有图像,我想为该listing_id 取最低位置并将其设置为位置1。
就像是:
update media_table set position = 1 where ...
通过 @ypercube的语法修复,该查询现在适用于 MySQL:
UPDATE media_table m
JOIN (
SELECT listing_id, min(position) AS position
FROM media_table
GROUP BY listing_id
HAVING min(position) > 1
) x ON (m.listing_id, m.position) = (x.listing_id, x.position)
SET m.position = 1;
解释:
在子查询中找到linsting_id
最小值position
大于 1 的所有位置。使用这些发现立即更新行。我认为(listing_id, position)
是独一无二的。
UPDATE media_table
SET position=(SELECT MIN(position) FROM media_table)
WHERE listing_id IS NULL;
试试这个:
update images i1,
( select i1.image_name, i1.listing_id from images i1
left join images i2
on i1.listing_id = i2.listing_id and i1.position > i2.position
where i2.position is null and i1.position != 1
) f
set position = 1
where i1.image_name = f.image_name and i1.listing_id = f.listing_id;
这假设您可以通过 识别记录image_name, listing_id
。如果您可以这样做,image_name
那么查询会更简单,因为您可以删除listing_id
比较和选择。