33

「group_id」でリンクされたAとBの2つのテーブルがあります。
私が使用している2つの変数:$keyword, $_SESSION['user_id']


group_id
キーワード_

入札
ID
group_id
user_id

キーワード検索に基づいて、このユーザーが属していないすべてのグループを選択できるようにしたいと考えています。

したがって、目標は、A WHERE のすべての行を SELECT することです。B の対応する group_id に対して、user_id!={$_SESSION['user_id'} AND キーワードのようにします。

これは私が試したものです:

SELECT a.* 
FROM a 
LEFT JOIN b ON a.group_id=b.group_id 
WHERE a.keyword LIKE '%".$keyword."%' 
AND b.user_id!=$_SESSION{['user_id']} 
GROUP BY group_id

ただし、削除しない限り、行 (一致) は見つかりませんAND b.user_id!=$_SESSION{['user_id']}。その場合、ユーザーが既に含まれているグループも含まれます。これは私が望むものではありません。

どんな助けでも大歓迎です!ありがとう

4

4 に答える 4

22

正解は単純です:

SELECT a.group_id
FROM a 
LEFT JOIN b ON a.group_id=b.group_id  and b.user_id = 4
where b.user_id is null
  and a.keyword like '%keyword%'

ここでチェックしていuser_id = 4ます (セッションからのユーザー ID)。結合基準に含まれているため、基準に一致しないテーブル b の行、つまり、その user_id が含まれていないグループに対して null 値が返されます。

そこから、null 値をフィルタリングするだけで、ユーザーが属していないすべてのグループを取得できます。

ここでデモ

于 2015-05-02T10:57:23.310 に答える
0
SELECT * FROM a WHERE a.group_id IN 
(SELECT group_id FROM b WHERE b.user_id!=$_SESSION{'[user_id']} AND b.group_id = a.group_id)
WHERE a.keyword LIKE '%".$keyword."%';
于 2013-10-25T00:40:48.383 に答える