我有MySQL数据库表tbl_users
,它有两个uid
,name
,usergroupid
。 usergroupid
包含逗号分隔的整数(IE:1,2,3)。
我希望包含用户组ID的所有用户都说1或2或3或1,2或2,3或3,1或1,2,3。我在数据库中比较一个变量的值,该变量本身包含逗号分隔值,例如1.2.3或1,2或2,3或3,1或1,2,3。现在,获取结果的选择查询是什么。
我使用下面的select查询来查找结果,但错误。
SELECT user_id, user_fname, user_lname
FROM tbl_users
WHERE user_group_id IN (".$usergroupid.")
此处$usergroupid
是包含CSV
答案 0 :(得分:1)
在这种情况下,最好的办法是使用模式匹配来查找所需的值。
SELECT user_id, user_fname, user_lname FROM tbl_users WHERE user_group_id LIKE (%".$usergroupid."%)
如果你想要csv中的确切模式,那么你必须根据,
打破你的csv并在循环中运行它以获得所需的结果。
但我认为对于这样的事情来说最好的事情就是让另一个表usergroup
带有user
和group
字段,这些字段将是用户之间的映射。所以在这种情况下你可以做到
SELECT userID FROM usergroup WHERE groupid IN $usergroupid
答案 1 :(得分:1)
LIKE
有可能完全错误的用户群,如果你喜欢'%1%',那么如果你有10,11,12等组,那么它就会匹配。
假设你的所有字符串都是x,y,z,......那么一个不太天真的LIKE
会更健壮。
SELECT user_id, user_fname, user_lname
FROM tbl_users
WHERE (',' + user_group_id + ',') LIKE '%,".$usergroupid.",%'
答案 2 :(得分:0)
您是否尝试过使用FIND_IN_SET
?我有时候一直在使用它,在那种情况下效果很好。
"FIND_IN_SET(user_group_id,".$user_group_id".)"
更多信息:here