我有一个包含巡航列表的表,并且我想要一个巡航'我想创建一个互斥的复选框,所以表中只有一个记录可以一次打勾
因此,当用户巡航'本周巡航'时,先前的“本周巡航”会自动取消选中。
我是否正在运行查询以加载现有的“本周巡航”并在同一时间更新该巡航的新行?不知道从哪里开始....
感谢
丰富:)
我有一个包含巡航列表的表,并且我想要一个巡航'我想创建一个互斥的复选框,所以表中只有一个记录可以一次打勾
因此,当用户巡航'本周巡航'时,先前的“本周巡航”会自动取消选中。
我是否正在运行查询以加载现有的“本周巡航”并在同一时间更新该巡航的新行?不知道从哪里开始....
感谢
丰富:)
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