我有一張圖片的表格,其中包含相應的listing_id和位置。SQL Update Where Statement
IMAGE_NAME,listing_id,位置
- 可以有每listing_id多個圖像。
- 每個圖像具有表示顯示順序
如果listing_id不具有在位置1的圖像時,我想利用該listing_id最低位置,並將其設置到位置1的整數位置。
喜歡的東西:
update media_table set position = 1 where ...
我有一張圖片的表格,其中包含相應的listing_id和位置。SQL Update Where Statement
IMAGE_NAME,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)
是獨一無二的。
邏輯是100%的聲音,但我不確定這是否有效(在MySQL的「UPDATE」語法中)。 – 2012-04-10 17:59:55
@ypercube:對,該語法不適用於MySQL。錯過了標籤。我提供了一個可以工作的替代解決方案。 – 2012-04-10 18:18:18
@ypercube:我必須誤讀手冊,因爲您的替代語法清楚地起作用。從子查詢中選擇,然後*然後*更新涉及的表是沒有問題的,然後... – 2012-04-10 18:40:31
試試這個:
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
比較和選擇。
「1」是可能的最低位置還是可能有一個「0」? – 2012-04-10 17:50:18