2012-01-30 77 views
0

我有一個包含巡航列表的表,並且我想要一個巡航'我想創建一個互斥的複選框,所以表中只有一個記錄可以一次打勾

因此,當用戶巡航'本週巡航'時,先前的「本週巡航」會自動取消選中。

我是否正在運行查詢以加載現有的「本週巡航」並在同一時間更新該巡航的新行?不知道從哪裏開始....

感謝

豐富:)

+0

呃,很難說出你要的是什麼,所以我編輯了標籤。 – 2012-01-30 09:46:55

回答

0
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個查詢那樣清晰。

+0

很好用,謝謝@Luc Franken – Rich 2012-01-30 16:20:51

+0

tnx @Rich 你使用過哪一個? – 2012-01-30 16:27:30

0

是的,你是在正確的軌道上。加載現有數據並在用戶提交表單時更新記錄。

+0

好的,所以我實際上更新了提交中的兩個記錄,一週的舊郵輪(打開勾號)和新郵件(打開它)。是否有可能一次更新兩條記錄? – Rich 2012-01-30 09:30:02

+0

@你爲什麼要一次更新兩條記錄? – 2012-01-30 09:45:54

+0

@Col。榴彈炮 - 假設有一艘本週已經巡航的巡航艦。當用戶選擇不同的巡航來巡航一週時,我想要關閉現有的巡航,並且新的巡航開啓 – Rich 2012-01-30 09:50:31

3

互斥複選框被稱爲單選

0
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 
相關問題