這裏的朋友就是我的表:只有那些不常見的兩個用戶
1):表的朋友:
id_invitation
id_exp
id_des
date_invitation
active
2):表用戶:
id
prenom
nom
email
password
我有兩個查詢:
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:第二個只返回兩個用戶之間的共同朋友。
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
小的修正:
1是2和3之間的普通朋友,因爲他是既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' ...否? –