我已经经历了几个类似的问题,似乎没有一个能处理这种类型的问题。
我想从朋友中选择所有帖子,然后组织它们。到目前为止,我尝试的所有方法都是一个朋友一个朋友地做,这很烦人,因为它不会在顶部显示最新的帖子。
以下是我的数据库的结构,我省略了任何无关的细节:
用户表:
UId (Unique UserId)
好友表:
Person1 | Person2
帖子表:
PostId | AuthorId | Text | DatePosted
AuthorId、Person1和Person2都通过其"UId"链接到用户。
在不知道如何构建数据库的情况下,这是一个很难回答的问题。
在过去,我做过类似的事情(单一查询),但我的数据库结构非常好,专门用于此目的。
SELECT * from posts
LEFT JOIN users ON (poster_id=user_id)
WHERE poster_id IN (
SELECT related_id
FROM user_relationships
WHERE user_relationship = 'friend'
AND user_id = 1
)
ORDER BY post_date DESC
LIMIT 20
添加-现在不是在MySQL前面,但对于OP指定的DB,它可能看起来更像这样:
SELECT * from posts
LEFT JOIN users ON (poster_id=user_id)
WHERE poster_id IN (
SELECT (if(user_idA='.$userId.'), user_idB, user_idA) as related_id,
FROM user_relationships
WHERE accepted = TRUE
AND '.$userId.' IN (user_idA, user_idB)
)
ORDER BY post_date DESC
LIMIT 20
类似的东西会起作用:
SELECT p.*
FROM Posts p
JOIN FriendRequests fr
ON fr.from = p.authorid
WHERE fr.accepted = 1
AND fr.to = @myid
ORDER BY p.postdate DESC