我有一個包含巡航列表的表,並且我想要一個巡航'我想創建一個互斥的複選框,所以表中只有一個記錄可以一次打勾
因此,當用戶巡航'本週巡航'時,先前的「本週巡航」會自動取消選中。
我是否正在運行查詢以加載現有的「本週巡航」並在同一時間更新該巡航的新行?不知道從哪裏開始....
感謝
豐富:)
我有一個包含巡航列表的表,並且我想要一個巡航'我想創建一個互斥的複選框,所以表中只有一個記錄可以一次打勾
因此,當用戶巡航'本週巡航'時,先前的「本週巡航」會自動取消選中。
我是否正在運行查詢以加載現有的「本週巡航」並在同一時間更新該巡航的新行?不知道從哪裏開始....
感謝
豐富:)
UPDATE cruises SET active=0
UPDATE cruises SET active=1 WHERE id=123
你可以一個唯一索引添加到當前以確保在任何時候,只有一個活動。
這可能已經做到了。但是,如果這樣做會造成併發問題。這不太可能發生,並且不會產生我認爲很重要的問題,所以如果不進入事務和其他事物來防止併發,它是可行的。
它可以在一個查詢也可以做,但真的不喜歡,雖然它是可行的在MySQL中,僞代碼:
UPDATE cruises SET active = (CASE WHEN id=123 THEN 1 ELSE 0 END)
你必須喜歡它。關於一個查詢的好處是更新併發性是由MySQL處理的,但我懷疑它比較慢並且不像2個查詢那樣清晰。
很好用,謝謝@Luc Franken – Rich 2012-01-30 16:20:51
tnx @Rich 你使用過哪一個? – 2012-01-30 16:27:30
互斥複選框被稱爲單選
UPDATE cruises
SET active = (CASE WHEN id = @OldCruiseId THEN 0
WHEN id = @NewCruiseId THEN 1
END
)
WHERE cruise_id IN (@OldCruiseId, @NewCruisedId)
AND user_id = @UserId
呃,很難說出你要的是什麼,所以我編輯了標籤。 – 2012-01-30 09:46:55