簡體   English   中英

友誼系統Sql結構與查詢

[英]Friendship System Sql Structure & Query

我正在編寫一個友誼系統,它有兩個表。

會員

  • ID
  • 用戶名
  • 密碼

朋友

  • ID
  • 用戶身份
  • friend_id
  • 狀態

假設我想要一個可以選擇成員的朋友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_idfriend_id之間只存在一個關系; 這些都可以統一描述為id列。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM