SELECT p1.userid, p1.username, p2.lids
FROM VB_user p1
LEFT JOIN AB_judge_perm p2 on p1.userid = p2.userid
WHERE p1.membergroupids LIKE '".19.",%'
OR p1.membergroupids LIKE '%,".19."'
OR p1.membergroupids LIKE '%,".19.",%'
OR p1.membergroupids = '".19."'
我在想p1.membergroupids
连接效果不佳?如果我删除了p1.membergroupids
条件,那么查询的工作方式就像我想要工作一样,exept我希望它只显示属于第19组的用户,因此LIKE
。 p1.membergroupids
是一个多值属性。
答案 0 :(得分:0)
正如@muistooshort所指出的,你应该将你的membergroupids移动到多对多连接表,这个问题就会消失。像这样的隐藏的非标准化结构将导致你无数的痛苦!创建一个新的连接表 - member_group(member_id,group_id)
如果你坚持使用这个丑陋的结构,你可以用FIND_IN_SET -
替换你的多重OR条件SELECT p1.userid, p1.username, p2.lids
FROM VB_user p1
LEFT JOIN AB_judge_perm p2
ON p1.userid = p2.userid
WHERE FIND_IN_SET(19, p1.membergroupids)