0

我有一张带有相应listing_id 和位置的图像表。

image_name、listing_id、位置

  • 每个listing_id 可以有多个图像。
  • 每个图像都有一个表示显示顺序的整数位置

如果listing_id 在位置1 没有图像,我想为该listing_id 取最低位置并将其设置为位置1。

就像是:

update media_table set position = 1 where ...
4

3 回答 3

3

通过 @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)是独一无二的。

请参阅 MySQL 的工作演示。

于 2012-04-10T17:52:57.117 回答
0
UPDATE media_table
SET position=(SELECT MIN(position) FROM media_table)
WHERE listing_id IS NULL;
于 2012-04-10T17:51:01.363 回答
0

试试这个:

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比较和选择。

于 2012-04-10T18:04:55.087 回答