【发布时间】:2017-04-14 11:14:28
【问题描述】:
我有一组按钮,一次只能选择其中一个,并且可以关闭它们,这意味着如果用户再次选择一个选定的按钮,它应该被取消选择。
假设我的表有 buttons_id、user_id 和 value 列,buttons_id 和 user_id 是主键(连接在一起)。
所以我想
- 如果
buttons_id,user_id组合不存在,则将选定的value插入表中 (insert into) - 如果存在
buttons_id,user_id组合并且值不同,则更新记录 (on duplicate key update) - 如果
buttons_id,user_id组合存在且值相同则删除记录(delete ?)
我怎样才能做到这一点是一个单一的查询?我可以在on duplicate key update 中使用case 吗?
【问题讨论】:
-
我看不到可以在单个语句中 [INSERT/UPDATE] 和 [DELETE] 的方法。请注意,动作是您在语句中编写的第一件事。
-
按钮状态最好在您的应用程序中以变量(或按钮组件本身)的形式处理。否则,您必须在更新后再次查询数据库以查看现在哪个按钮处于活动状态(尽管您只是在应用程序中按下它)。如果只有一个按钮可以激活,据我了解,您的方法将不起作用,因为按下特定按钮不会取消选择其他按钮。因此,只需为每个
user_id(主键)更新一行,最后按下的按钮为button_id,其(已知)状态为value(或者如果你真的想切换到数据库,则使用case)。
标签: mysql insert duplicates