2016-11-20 8 views
8

を条件に一致する行を除外:は、2つのテーブルを結合が、私は名前でユーザーを検索するだけのためにのために戻って結果を得ることができるようにしたい3番目のテーブルに

  1. 私は
  2. 者と友達だ人たち私の 'イベント'とはまだ整列していない

私は正常部分#1を行い、クエリを持っている:

SELECT u.id, first_name, last_name 
FROM user u 
JOIN friend f 
ON (
    (f.requester_id = u.id AND f.recipient_id = :my_user_id) 
    OR (f.recipient_id = u.id AND f.requester_id = :my_user_id) 
    AND confirmed = 1 
) 
AND (
    (first_name LIKE :search_input OR last_name LIKE :search_input) 
    OR (CONCAT (first_name, ' ', last_name) LIKE :search_input) 
) 
AND NOT u.id = :my_user_id 
ORDER BY last_name 
LIMIT 5 

は、部品#2を追加する方法を見つけ出すのに苦労。テーブルは次のようになります。

USER 
id | first_name | last_name 
-- | ---------- | --------- 
0 | John  | Doe 
1 | Jane  | Doe 
2 | Bob  | Smith 
3 | Mike  | Jones 

FRIEND 
id | requester_id | recipient_id | confirmed 
-- | ------------ | ------------ | --------- 
0 | 0   | 1   | 1 
1 | 3   | 1   | 1 
2 | 2   | 3   | 1 
3 | 1   | 2   | 1 

USER_EVENT 
id | user_id | event_id 
-- | ------- | -------- 
0 | 0  | 43     
1 | 0  | 846     
2 | 0  | 1058    
3 | 1  | 846  
4 | 1  | 912     
5 | 2  | 537     
6 | 3  | 846 

サンプル・データをクエリが受け取ることがあります。

:search_input (e.g. '%bob%') 
:my_user_id (e.g. 3) 
:event_id (e.g. 846) 
+0

Sidenote: ''%bob% ''あなたはそれらの中かっこを使わないでください。 ''%bob% ''と読み替えるべきです。そうしないと、コードで解析エラーが発生します。 –

+0

それを指摘してくれてありがとう。 –

答えて

5

あなたは、単にあなたのクエリに別の句を追加することができます:AND user_id NOT IN (SELECT user_id from USER_EVENT where event_id = :event_id)

全クエリ:

SELECT u.id, first_name, last_name 
FROM user u 
JOIN friend f 
ON (
    (f.requester_id = u.id AND f.recipient_id = :my_user_id) 
    OR (f.recipient_id = u.id AND f.requester_id = :my_user_id) 
    AND confirmed = 1 
) 
AND (
    (first_name LIKE :search_input OR last_name LIKE :search_input) 
    OR (CONCAT (first_name, ' ', last_name) LIKE :search_input) 
) 
AND NOT u.id = :my_user_id 
AND user_id NOT IN (SELECT user_id from USER_EVENT where event_id = :event_id) 
ORDER BY last_name 
LIMIT 5 
+0

'event_id'ではなく' envet_id' –

+0

ありがとう@ Fred-ii-。タイプミスを修正しました –

+0

ようこそ。私はまた、彼らの質問の下にコメントを投稿しました。 –

関連する問題