2012-03-11 89 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)