使用PHP动态组合两个(或多个)SQL结果


Combining two (or more) SQL results dynamically with PHP?

我已经经历了几个类似的问题,似乎没有一个能处理这种类型的问题。

我想从朋友中选择所有帖子,然后组织它们。到目前为止,我尝试的所有方法都是一个朋友一个朋友地做,这很烦人,因为它不会在顶部显示最新的帖子。

以下是我的数据库的结构,我省略了任何无关的细节:

用户表:

 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