WHERE = (SELECT parent_id FROM same table LIMIT 1)
WHERE id = (SELECT parent_id FROM sametable LIMIT 1)
这基本上是一个单选按钮行为,但用于数据库。
我有 table galleries
和 table images
images
有 image_id
、gallery_id
和 featured
列
1 | 55 | true
2 | 55 | false
3 | 55 | false
4 | 54 | true
每个画廊应该只有一张精选图片。我的函数应该将 image_id
用于新的特色图片 - 将 featured
设置为 true 并将旧的 featured
设置为 false...
如何仅针对该特定画廊将该画廊的旧特色图片设置为 false,将新特色图片设置为 true。 (我只想提供图片的 ID 而不是 gallery_id
。)
我正在考虑使用 2 个查询:一个取消当前的设置,一个设置新的
我什至无法让第一个开始工作。这是我尝试过的:
UPDATE `images` SET `featured` = 0 WHERE `featured` = 1
AND `page_id` = (SELECT `page_id` FROM `images` WHERE `image_id` = :image_id LIMIT 1)
出于某种原因,这不起作用。不可能有另一个 where
我想...
谢谢!
UPDATE `images`
SET `featured` = IF(image_id = :image_id, 1, 0)
WHERE `gallery_id` = :gallery_id
因此您只需将给定图库的图像重置为所需状态。
IF(image_id = :image_id, 1, 0)
表达式 returns 1
如果 image_id
匹配给定的 :image_id
否则 0
。
比 mysql 的 SQL 方言更喜欢 ANSII SQL 的人可能会使用
CASE image_id WHEN :image_id THEN 1 ELSE 0 END
相反。
如果您不想显式传递 gallery_id
,您可以 select 在同一个查询中传递它:
WHERE `gallery_id` IN (SELECT gallery_id FROM
(SELECT gallery_id FROM images WHERE image_id = :image_id) x)
注意有 2 个嵌套查询。你需要它来愚弄 mysql,因为它不允许从 DML 查询访问相同的 table。
这基本上是一个单选按钮行为,但用于数据库。
我有 table galleries
和 table images
images
有 image_id
、gallery_id
和 featured
列
1 | 55 | true
2 | 55 | false
3 | 55 | false
4 | 54 | true
每个画廊应该只有一张精选图片。我的函数应该将 image_id
用于新的特色图片 - 将 featured
设置为 true 并将旧的 featured
设置为 false...
如何仅针对该特定画廊将该画廊的旧特色图片设置为 false,将新特色图片设置为 true。 (我只想提供图片的 ID 而不是 gallery_id
。)
我正在考虑使用 2 个查询:一个取消当前的设置,一个设置新的
我什至无法让第一个开始工作。这是我尝试过的:
UPDATE `images` SET `featured` = 0 WHERE `featured` = 1
AND `page_id` = (SELECT `page_id` FROM `images` WHERE `image_id` = :image_id LIMIT 1)
出于某种原因,这不起作用。不可能有另一个 where
我想...
谢谢!
UPDATE `images`
SET `featured` = IF(image_id = :image_id, 1, 0)
WHERE `gallery_id` = :gallery_id
因此您只需将给定图库的图像重置为所需状态。
IF(image_id = :image_id, 1, 0)
表达式 returns 1
如果 image_id
匹配给定的 :image_id
否则 0
。
比 mysql 的 SQL 方言更喜欢 ANSII SQL 的人可能会使用
CASE image_id WHEN :image_id THEN 1 ELSE 0 END
相反。
如果您不想显式传递 gallery_id
,您可以 select 在同一个查询中传递它:
WHERE `gallery_id` IN (SELECT gallery_id FROM
(SELECT gallery_id FROM images WHERE image_id = :image_id) x)
注意有 2 个嵌套查询。你需要它来愚弄 mysql,因为它不允许从 DML 查询访问相同的 table。