使用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之间的关系是位字段而不是布尔值,这允许更复杂的链和单向关系。