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

使用PHP动态组合两个(或更多)SQL结果?,php,sql,Php,Sql,我经历过几个类似的问题,似乎没有一个能解决这类问题 我想从朋友中选择所有帖子,然后组织它们。到目前为止,我尝试过的所有方法都是一个朋友一个朋友地完成的,这很烦人,因为它没有在顶部显示最新的帖子 以下是我的数据库的结构,我省略了任何不相关的细节: 用户表: UId (Unique UserId) 朋友表: Person1 | Person2 员额表: PostId | AuthorId | Text | DatePosted AuthorId、Person1和Person2都通过其“U

我经历过几个类似的问题,似乎没有一个能解决这类问题

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

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

用户表:

 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 * 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

类似的方法会奏效:

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

只需一个SQL查询并按post datetime排序,就可以获取所有朋友的帖子。但我不能。在查询另一个表时,我不能只向SQL询问另一个具有多个条件的表。。我可以吗?请定义
UserFriends
的结构,我很确定这可以在一个查询中完成。您希望SQL UNION将来自不同表的两个查询组合起来。如果您可以发布表的结构,以便我们可以可视化它们的关系,这可能会更有帮助。只需一个SQL查询并按post datetime排序,就可以获得您所有朋友的帖子。但是,我不能。在查询另一个表时,我不能只向SQL询问另一个具有多个条件的表。。我可以吗?请定义
UserFriends
的结构,我很确定它可以在一个查询中完成。您希望SQL UNION将来自不同表的两个查询组合起来。如果您可以发布表的结构,以便我们可以可视化它们的关系,这可能会更有帮助(并非所有表都提到,只有相关的表):Posts是一个表,它存储帖子的文本、作者的自动增量ID,并有自己的自动增量ID和发布日期。FriendRequests是一个表,用于存储谁的朋友和谁的朋友(有唯一的朋友ID、接受的布尔值以及“from”和“to”这两个都是人的自动递增ID)。哦,和“用户”有一个自动递增ID。除了FriendRequests之外,非常相似。我有更多的用户a与用户B之间的关系是用位字段而不是布尔值,这允许更复杂的链和单向关系。它的结构是这样的(并非所有表都提到,只有相关的表):Posts是一个表,它存储帖子的文本、作者的自动增量ID,并有自己的自动增量ID和发布日期。FriendRequests是一个表,用于存储谁的朋友和谁的朋友(有唯一的朋友ID、接受的布尔值以及“from”和“to”这两个都是人的自动递增ID)。哦,和“用户”有一个自动递增ID。非常相似,除了FriendRequests。我有更多的用户a与用户B之间的关系是位字段而不是布尔值,这允许更复杂的链和单向关系。