2012-03-11 19 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です。 p1.membergroupidsは、複数値属性です。このmysql結合に何が問題なのですか?

+0

、私はあなたが特定のエラーを取得するのですか? –

+1

0.19と解釈できるので.19を置くべきではありません。そこにスペースを入れてください。 – galchen

+0

これはエラーの問題ではありません。私が得ると思われる結果が得られていないことです。 'p1.membergroupid'フィルターは結果に適用されません。 – user962449

答えて

0

@muistooshortが指摘しているように、メンバーグループを多対多のジョインテーブルに移動する必要があります。この問題は解消されます。このような非凡な非正規化構造は、あなたに痛みの量をもたらします!新加入のテーブルを作成します - member_group(MEMBER_ID、GROUP_ID)

あなたはこの恐ろしい構造を使う、という場合は、FIND_IN_SETとあなたのmulitple 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) 
関連する問題