2012-03-11 68 views
0
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连接有什么问题?

+0

你怎么知道这是行不通的,我的意思是你有任何具体的错误? – 2012-03-11 02:37:53

+1

因为它可以翻译为0.19,所以不应该放.19。确保你在那里放置空间 – galchen 2012-03-11 02:39:44

+0

这不是一个错误问题,而是我没有得到我想要得到的结果。 'p1.membergroupid'过滤器不适用于结果 – user962449 2012-03-11 02:41:23

回答

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)