我经历了几个类似的问题,似乎都没有解决这类问题。
我想选择来自朋友的所有帖子,然后组织它们。到目前为止我尝试过的所有方法都是朋友一起做的,这很烦人,因为它没有向你展示最新的帖子。
以下是我的数据库的结构,我遗漏了任何不相关的细节:
用户表:
UId (Unique UserId)
朋友表:
Person1 | Person2
帖子表:
PostId | AuthorId | Text | DatePosted
AuthorId,Person1和Person2都通过“UId”链接到用户。
答案 0 :(得分:3)
如果不知道如何构建数据库,这是一个难以回答的问题。
过去,我做过类似的事情(单一查询),但我的数据库结构非常专门用于此目的。
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
答案 1 :(得分:1)
这样的事情会起作用:
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