这个mysql连接有什么问题?
问题描述:
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
条件,查询就像我想要的那样工作,但是我希望它只显示属于组19的一部分的用户,因此LIKE
s。 p1.membergroupids
是一个多值属性。这个mysql连接有什么问题?
答
正如@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)
你怎么知道这是行不通的,我的意思是你有任何具体的错误? – 2012-03-11 02:37:53
因为它可以翻译为0.19,所以不应该放.19。确保你在那里放置空间 – galchen 2012-03-11 02:39:44
这不是一个错误问题,而是我没有得到我想要得到的结果。 'p1.membergroupid'过滤器不适用于结果 – user962449 2012-03-11 02:41:23