2012-10-29 30 views
-1

我有三個表 - 1個FriendShip,2個用戶,3個頁面。 友誼表有來自用戶和用戶列。來自用戶列的 包含發起好友請求的用戶。 toUser包含誰收到了朋友請求(啓發來自Facebook)需要幫助創建一個MySQL查詢

我想從Pages表中選擇與給定用戶的朋友,比如'user1'。

SELECT friends.`fromUser` AS `friend` 
    FROM friends 
    INNER JOIN users 
    ON friends.`fromUser` = users.`userid` 
    WHERE `friends`.`toUser`='user1' 
UNION 
    SELECT friends.`toUser` AS `friend` 
    FROM friends 
    INNER JOIN users 
    ON friends.`toUser` = users.`userid` 
    WHERE friends.`fromUser`='user1' 

這給我造成這樣的:: 我可以用這個查詢得到用戶user1的朋友

朋友
user2的
USER5

等等...

我想選擇所有這些用戶的頁面,並按時間戳列降序排列。任何人都請提供解決方案?

回答

0

您可以使用IN,假設你的頁面表有一個userid(或同等學歷)柱:

SELECT * FROM Pages 
WHERE userid IN (
    -- Your query to retrieve friends of user1 
) 
ORDER BY `timestamp` DESC 
+1

謝謝思維不同而且聰明。我忘記了這種可能性。 –

0

所以用你作爲派生表查詢,以便於:

SELECT * 
FROM pages 
INNER JOIN 
(
    SELECT friends.`fromUser` AS `friend` 
    FROM friends 
    INNER JOIN users 
    ON friends.`fromUser` = users.`userid` 
    WHERE `friends`.`toUser`='user1' 
UNION 
    SELECT friends.`toUser` AS `friend` 
    FROM friends 
    INNER JOIN users 
    ON friends.`toUser` = users.`userid` 
    WHERE friends.`fromUser`='user1' 
) AS friends ON pages.user = friends.friend 
ORDER BY `timestamp` DESC