[英]Friendship System Sql Structure & Query
我正在編寫一個友誼系統,它有兩個表。
會員
朋友
假設我想要一個可以選擇成員的朋友ID的查詢$ userId如何在一個查詢中進行此操作?
我找到了一個解決方案,可以進行2次查詢。 第一個選擇朋友WHERE user_id = $userId
,第二個選擇朋友WHERE friend_id = $userId
,然后將它們混合在一個數組中。 如果沒有其他解決方案,我將使用它。
請問SQL結構和查詢的任何想法?
使用:
SELECT f.friend_id
FROM FRIENDS f
WHERE f.user_id = $user_id
UNION
SELECT t.user_id
FROM FRIENDS t
WHERE t.friend_id = $user_id
使用UNION
將刪除重復項。 UNION ALL
會更快,但不會刪除重復項。
如果您想從MEMBERS
表中獲取朋友的信息,請使用:
SELECT m.*
FROM MEMBERS m
JOIN (SELECT f.friend_id 'user_id'
FROM FRIENDS f
WHERE f.user_id = $user_id
UNION
SELECT t.user_id
FROM FRIENDS t
WHERE t.friend_id = $user_id) x ON x.user_id = m.id
順便說一句:我希望你對變量使用mysql_escape_string ,否則你冒着SQL注入攻擊的風險:
你應該可以嘗試使用
SELECT m.*
FROM friends f INNER JOIN
members m ON f.friend_id = m.user_id
WHERE f.user_id = $userId
這將為您提供所有朋友的詳細信息
要兩個人看看
SELECT DISTINCT CASE WHEN f.user_id = $userId then f.friend_id else f.user_id END CASE
FROM friends f
WHERE f.user_id = $userId
OR f.friend_id = $userId
為什么不為1個友誼插入2行。 例如:
假設我們有2位用戶將成為朋友
User_id:1&Friend_id:2
insert into friends (user_id, friend_id, status) values (1,2,0)
insert into friends (user_id, friend_id, status) values (2,1,0)
因此您可以通過簡單的選擇查詢輕松選擇。
此外,它將緩解您可能的下一個問題“如何找到共同的朋友”的痛苦。
因為你要求的東西很簡單:
SELECT friend_id FROM friends WHERE user_id = id; [fill in the id]
我會給你一些更高級的東西:
SELECT * FROM members AS m
WHERE m.id
IN (SELECT f.friend_id FROM friends AS f
WHERE f.user_id = (SELECT pm.id FROM members AS pm
WHERE pm.username = 'amindzx'));
使用子查詢的連接更好。
此外,在friends列中不需要id
,因為user_id
和friend_id
之間只存在一個關系; 這些都可以統一描述為id
列。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.