「group_id」でリンクされたAとBの2つのテーブルがあります。
2つの変数を使用しています:$keyword, $_SESSION['user_id']
[〜#〜] a [〜#〜]
group_id
キーワード
[〜#〜] b [〜#〜]
id
group_id
ユーザーID
キーワード検索に基づいて、このユーザーが含まれていないすべてのグループを選択できるようにします。
したがって、目標は、Aのすべての行を選択し、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']}
を削除しない限り、行(一致)は検出されません。その場合、ユーザーが既に存在するグループも含まれます。
助けていただければ幸いです!ありがとう
余分な条件をJOIN ON条件に移動するだけです。この方法では、結果を返すためにbが存在する必要はありません。
SELECT a.* FROM a
LEFT JOIN b ON a.group_id=b.group_id AND b.user_id!=$_SESSION{['user_id']}
WHERE a.keyword LIKE '%".$keyword."%'
GROUP BY group_id
正解は単純です:
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値をフィルター処理するだけで、ユーザーが所属していないすべてのグループがあります。