簡體   English   中英

sql-獲取所有用戶朋友

[英]sql - fetch all user friends

我想查詢3個不同的表。 在此處輸入圖片說明

我的方法是從朋友表中獲得朋友 因此,輸出為: 在此處輸入圖片說明

我嘗試過這種解決方案

SELECT users.firstname, users.lastname, 
users.screenname, profile.profile_pic, friends.friend_id
FROM website.users users
INNER JOIN website.friends friends ON (users.user_id = friends.friend_id)
LEFT  JOIN profile ON (friends.friend_id = profile.user_id)
WHERE (friends.user_id = "12052822" or friends.friend_id = "12052822")

問題是當它匹配一個記錄時,它輸出列“ friend.user_id” 那不是我想做的! 如果用戶已登錄, 查詢將獲取他的所有朋友 ...我該如何以一種更輕松,更好的方式進行操作?

users表中的iduser_id列至少令人困惑? 為什么要有兩個“標識符”列? 哪兩個是與friend.user_id聯接的? 它是與friend.friend_id連接的同一列嗎? 並顯示所有名稱,即friends.user_id是剛剛登錄的用戶,還是顯示friends.friend_id是剛剛登錄的用戶,還是同時顯示這兩個名稱?

在進一步澄清之前,我將假定結果集應同時包含兩個好友列表:被用戶成為好友的人和與用戶成為好友的人。 我還將假設users.user_id列是users.user_id列。

我們可以很容易地將其寫為UNION,並注意,如果已登錄的用戶與已經登錄的用戶成為friends ,則UNION會消除重復的條目(因此,Friends表中有兩個條目與user_idfriend_id的同一對值。

進入TDQD(測試驅動的查詢設計),我們可以編寫(假設新登錄的用戶是user_id = 12052822 ):

被用戶所喜愛的用戶12052822

SELECT u.user_id, u.firstname, u.lastname, u.screenname, p.profile_pic
  FROM website.friends AS f
  JOIN website.users   AS u ON f.friend_id = u.user_id
  JOIN website.profile AS p ON p.user_id   = u.user_id
 WHERE f.user_id = 12052822;

與朋友12052822有朋友的用戶

SELECT u.user_id, u.firstname, u.lastname, u.screenname, p.profile_pic
  FROM website.friends AS f
  JOIN website.users   AS u ON f.user_id = u.user_id
  JOIN website.profile AS p ON p.user_id = u.user_id
 WHERE f.friend_id = 12052822;

兩組用戶

SELECT u.user_id, u.firstname, u.lastname, u.screenname, p.profile_pic
  FROM website.friends AS f
  JOIN website.users   AS u ON f.friend_id = u.user_id
  JOIN website.profile AS p ON p.user_id   = u.user_id
 WHERE f.user_id = 12052822;
UNION
SELECT u.user_id, u.firstname, u.lastname, u.screenname, p.profile_pic
  FROM website.friends AS f
  JOIN website.users   AS u ON f.user_id = u.user_id
  JOIN website.profile AS p ON p.user_id = u.user_id
 WHERE f.friend_id = 12052822;

您可以分別測試和調試每個組件查詢,然后將它們組合以創建最終答案。

暫無
暫無

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

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