从 2 个表中获取数据,其中一个表依赖于另一个表
Posted
技术标签:
【中文标题】从 2 个表中获取数据,其中一个表依赖于另一个表【英文标题】:Get data from 2 tables where one table is dependent of the other 【发布时间】:2015-04-21 16:39:55 【问题描述】:主表:“帖子”。 结构:
id || text || time || user_id
辅助表:“喜欢”。 结构:
id || post_id || time || user_id
在这里,第二张表中的 post_id 可以(& 必须)是第一张表中的 ID。我想运行一个查询,我将从特定 user_id 的 posts 表中获取所有 ID,以及从特定 user_id 的 likes 表中获取所有 POST_ID。
这是我尝试过的,但它只从 posts 表中获取 ID,没有从 likes 表中获取任何内容:
"SELECT id FROM posts WHERE id IN (SELECT post_id FROM likes WHERE user_id=$userid) OR id IN (SELECT id FROM posts WHERE user_id=$userid)"
但是,当我删除最后的 OR 语句时,会从 likes 表中获取 post_ids:
"SELECT id FROM posts WHERE id IN (SELECT post_id FROM likes WHERE user_id=$userid)"
我做错了什么?请帮忙。非常感激。谢谢!
额外:
有什么方法可以按照 ID 的降序排列它们吗?
如果我通过“p.id DESC”对它们进行排序,那么喜欢表中的所有 post_ids 都会出现在底部。
例如, post表中有7个ID(1、2、3、4、5、9、10), 喜欢表中的 3 (6, 7, 8)。
目前显示如下:10、9、5、4、3、2、1、6、7、8。
如何显示为:10、9、8、7、6、5、4、3、2、1?谢谢!
【问题讨论】:
mysql Join 可以更好地帮助你。 【参考方案1】:如果您想从 post 表中获取 ALL
id,您可以在这种情况下尝试 mysql LEFT JOIN
,否则简单的 INNER JOIN
将完成您的任务。
SELECT p.id,l.post_id FROM posts p
LEFT JOIN likes l ON p.id=l.post_id
WHERE p.user_id=$userid OR l.user_id=$userid
编辑:
SELECT p.id FROM posts p
LEFT JOIN likes l ON p.id=l.post_id
WHERE p.user_id=$userid OR
l.user_id=$userid
ORDER BY p.id DESC
【讨论】:
有什么方法可以按照 ID 的降序排列?如果我通过“p.id DESC”对它们进行排序,那么喜欢表中的所有 post_id 都会出现在底部。例如 post 表中有 7 个 id (1, 2, 3, 4, 5, 9, 10),likes 表中有 3 个 (6, 7, 8)。目前显示如下:1、2、3、4、5、9、10、6、7、8。如何显示:1、2、3、4、5、6、7、8、9、 10.?谢谢! @Trondro Mulligan,您是否尝试过“p.id ASC”,请注意 LEFT JOIN 会产生所有“l.post_id”字段为 NULL 的结果,而此表中没有匹配项。这在你的情况下是完美的,因为 NULL 被认为小于任何值,就 ORDER BY 而言 我没有。我想按降序列出它们,我很抱歉写了相反的东西。列表应该是:10、9、8、7、6、5、4、3、2、1。谢谢! @Trondo Mulligan,请再试一次我编辑的答案。让我知道它是否有效?祝你好运。【参考方案2】:使用连接
SELECT id FROM posts
LEFT JOIN likes ON posts.id = likes.post_id
WHERE likes.user_id = $userid
【讨论】:
以上是关于从 2 个表中获取数据,其中一个表依赖于另一个表的主要内容,如果未能解决你的问题,请参考以下文章
Laravel - 从一个表中获取不存在于另一个表中的记录,并附加了 where 子句