如何将db表字段中的CSV与包含逗号分隔值的变量进行比较?

时间:2011-06-24 05:07:04

标签: mysql sql

我有MySQL数据库表tbl_users,它有两个uidnameusergroupidusergroupid包含逗号分隔的整数(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

的变量

3 个答案:

答案 0 :(得分:1)

在这种情况下,最好的办法是使用模式匹配来查找所需的值。

SELECT user_id, user_fname, user_lname  FROM tbl_users WHERE user_group_id LIKE (%".$usergroupid."%)

如果你想要csv中的确切模式,那么你必须根据,打破你的csv并在循环中运行它以获得所需的结果。

但我认为对于这样的事情来说最好的事情就是让另一个表usergroup带有usergroup字段,这些字段将是用户之间的映射。所以在这种情况下你可以做到

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