-1

ユーザーにページを提案するためのオートコンプリート入力を構築しようとしています。

フィールドを持つ「 users 」というテーブルがあります

「id」、「フルネーム」、「ユーザー名」、「画像」、

フィールドを持つテーブル「project_admin 」

「id」、「project_id」、「user_id4」

およびフィールドを持つテーブル「project_member 」:

「id」、「project_id」、「user_id」。

特定の project_id の管理者でもメンバーでもなく、フルネームまたはユーザー名に $term を含むすべてのユーザーを取得したい

次のクエリを使用します。

SELECT users.fullname,users.id,users.picture
FROM users, project_member, project_admin
WHERE (users.fullname LIKE '$term%'
OR users.username LIKE '$term%')
AND users.id NOT IN (SELECT user_id FROM project_member WHERE project_id=$project_id)
AND users.id NOT IN (SELECT user_id FROM project_admin WHERE project_id=$project_id) 
LIMIT 0,10

残念ながら、私が得た結果は、最初の結果の無限の重複です。私は何をすべきか?

解決済み はい、ありがとうございます。本当にusers.id、users.pictureが問題です。削除すると、すべてがスムーズに進みます

4

3 に答える 3

0

left outer joinを使用するのではなく、これを として表現することもできますnot in

SELECT users.fullname,users.id,users.picture
FROM users left outer join
     project_member
     on project_member.user_id = users.id left outer join
     project_admin
     on project_admin.user_id = users.id
WHERE (users.fullname LIKE '$term%' OR users.username LIKE '$term%') and
      project_member.user_id is NULL and
      project_admin.user_id is NULL
LIMIT 0,10

句では使用,しないでください。fromデカルト積が必要な場合は、明示的に を使用しますcross join

于 2013-06-10T10:39:16.110 に答える