両方のユーザーに共通していない友人が私のテーブルです:だけここ
1):表の友人:
id_invitation
id_exp
id_des
date_invitation
active
2):表のユーザー:
id
prenom
nom
email
password
私は2つを持っていますクエリ:
1:最初の私の友人のリストを返します。
SELECT *
FROM users U
JOIN friends F
ON (U.id = F.id_exp AND F.id_des = :id)
OR (U.id = F.id_des AND F.id_exp = :id)
WHERE U.id <> :id
AND F.active = 1
2:2番目のメンバーは、2人のユーザー間の相互の友人のみを返します。
SELECT u.id
, u.nom
, u.prenom
FROM users u
JOIN
(SELECT id_exp
, id_des
FROM friends
WHERE id_exp IN(:id_exp, :id_des)
AND active = 1
UNION
SELECT id_des
, id_exp
FROM friends
WHERE id_des IN(:id_exp, :id_des)
AND active = 1
) tmp
ON tmp.id_des = u.id
GROUP
BY u.id
HAVING COUNT(*) = 2
小補正:彼は2と3の両方を持つ友人であるので、
1は2と3の間の共通の友人であるあなたは2と3で、共通の友人を収集する場合(、あなたが持っているだろう1)。 4は2の友人で3はありません。 3も5と6の友人です.2の友人のリストで検索したいですが、2人から友人を回復したいのですが、3人の友達(この場合は4人)ではありません。 は、私は4だけではなく4,5,6
詳しい情報を返すようにしたい: は、私は2の珍しい友人の3訪問リストは、それが4 を見たとき、私は2の友人だけを返すようにしたいことをしたい人4と同じくらい親切ではありません。
私はそれを説明するのに少し問題があります。
そして私は、そのコードを試してみました:
SELECT
*
FROM
users U
INNER JOIN friends F
ON (U.id = F.id_exp AND F.id_des = :id)
OR (U.id = F.id_des AND F.id_exp = :id)
WHERE
(U.id <> :id_k
AND F.active = 1)
AND NOT IN
(SELECT u.id,
u.nom, u.prenom, u.avatar
FROM users u
INNER JOIN
(
SELECT id_exp, id_des
FROM friends
WHERE id_exp IN(:id_exp, :id_des)
AND active = 1
UNION
SELECT id_des, id_exp
FROM friends
WHERE id_des IN(:id_exp, :id_des)
AND active = 1
) tmp ON tmp.id_des = u.id
GROUP BY u.id
HAVING COUNT(*) = 2)
をしかし、それは最悪の場合は動作しません、それはエラーを生成し、問題のページのセクションが表示されていません。 ありがとうございます。
サンプルデータと予想される出力を追加してください。 –
あなたは 'HAVING COUNT(*)= 2'を' HAVING COUNT(*)= 1'に変更する必要があるようです。 –