我有一张桌子上有以下记录:
ID | Username | Selected |
----------------------------
1 | JamesC | 1 |
2 | MikeF | 0 |
3 | JamesC | 0 |我希望只在用户名相同的1行中选择为true。因此,例如,当我将ID = 3设置为Selected = true时,我希望将ID =1设置为具有Selected = false以及具有相同用户名的任何其他ID。
现在我在做这个,
//set all to 0
update table set selected = 0 where username = '$username'
//set unique row to true
update table set selected = 1 where username = '$username' and ID = '$ID';是否有更好、更简洁的方法来达到同样的效果?
发布于 2013-12-05 01:52:28
如前所述--数据库结构不太好,最好有具有所选项的唯一名称和ID的表,无论如何,您可以使用以下一个查询:
update table set selected=IF(id = '$ID', 1, 0) where username = '$username';此外,尝试一个可能更快的变体(通过解释测试两者):
update table set selected=IF(id <> '$ID', 0, 1) where username = '$username';发布于 2013-12-05 01:02:15
在我看来,这更像是优化db结构。不过,具体答案需要更多信息,但请查看下面的示例,以了解我在说什么:
用户:
user_id | user_name | selected_character_id | ...other account data
1 | JamesC | 3
2 | MikeF | 2人物:
character_id | user_id | ...other character data
1 | 1 |
2 | 2 |
3 | 1 |您将需要JOIN表来检索所选字符的所有数据(因为它是在唯一ids上运行的),但是可以避免数据重复(更容易切换)。
发布于 2013-12-04 23:44:31
您将始终需要第二个语句,但由于您只有一个“选定的”行,所以可以使用:
update table set selected = 0 where selected = 1https://stackoverflow.com/questions/20388459
复制相似问题