2012-01-30 78 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 
相关问题