从 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 子句

从 2 个表中获取数据到 excel 表中

如何从sql数据库中的2个表中获取多列数据?

如何根据搜索关键字 rails 从 2 个表中获取数据

如何组合 2 个 Riverpod StreamProviders,其中 1 个流依赖于另一个流的数据?

从 2 个表中获取数据