-1

私は3つのテーブルを持っています-1-FriendShip、2-Users、3-Pages。フレンドシップテーブルには、fromUser列とtoUser列があります。fromUser列には、友達リクエストを開始したユーザーが含まれます。toUserには、友達リクエストを受け取った人が含まれます(Facebookからインスピレーションを受けています)

特定のユーザー、たとえば「user1」と友達である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'

これにより、次のような結果が得られます。

友達
user2user5
_

等々...

これらすべてのユーザーのページを選択し、タイムスタンプ列の降順で並べ替えます。誰かが解決策を提供してください?

4

2 に答える 2

0

Pagesテーブルに(または同等の)列INがあると仮定して、を使用できます。userid

SELECT * FROM Pages
WHERE userid IN (
   -- Your query to retrieve friends of user1
)
ORDER BY `timestamp` DESC
于 2012-10-29T16:17:56.140 に答える
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
于 2012-10-29T16:18:11.987 に答える