我有两张桌子。。。

SELECT * FROM posts
post_id | user_id | timestamp | feed_id | content

SELECT * FROM users
user_id | username | display_name

我有下面的MySQL查询来获取帖子并左键连接发布它的相应用户信息。。。然后根据发布的时间戳对文章进行排序。
SELECT posts.*, users.* FROM `posts` LEFT JOIN `users` ON posts.user_id=users.user_id ORDER BY `timestamp` DESC LIMIT 0, 15

现在,posts.feed_id将要么为空,这是一个“一般的帖子”,但它也可以是另一个用户id,这是一个针对该用户的帖子。
如何添加另一个JOIN语句以获取该用户信息(如果可用)--onposts.feed_id=users.user_id
比如(但不是这个,这不是我想要的):
SELECT posts.*, users.* FROM `posts` LEFT JOIN `users` ON posts.user_id=users.user_id AND posts.feed_id=users.user_id ORDER BY `timestamp` DESC LIMIT 0, 15

我肯定我得相应地给这些信息起个别名,但我似乎根本找不到

最佳答案

使用不同的别名连接两次:

SELECT posts.*, source.*, target.*
FROM `posts`
LEFT JOIN `users` as source ON posts.user_id=source.user_id
LEFT JOIN `users` as target on posts.feed_id=target.user_id
ORDER BY `timestamp` DESC LIMIT 0, 15

您可能需要显式地列出列,而不是source.*target.*,这样您就可以为它们指定不同的名称。

关于mysql - 左是否基于两个不同的字段联接同一张表?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/25459293/

10-16 13:45