php - 从 2 个表获取数据,其中一个表依赖于另一个表

标签 php mysql sql mysqli

主表:“帖子”。
结构:

id || text || time || user_id


辅助表:“喜欢”。
结构:

id || post_id || time || user_id


这里,第二个表中的 post_id 可以(且必须)是第一个表中的 ID。我想运行一个查询,从特定 user_id 的 posts 表中获取所有 ID,并从特定 user_id 的 Like 表中获取所有 POST_ID。

这是我尝试过的,但它只从 posts 表中获取 ID,而没有从 Like 表中获取任何内容:

"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?谢谢!

最佳答案

如果你想从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

关于php - 从 2 个表获取数据,其中一个表依赖于另一个表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29778285/

相关文章:

php - 用于指示非致命服务器错误的 HTTP 状态代码

php - 向现有实体添加额外的 SELECT 表达式结果

Python:处理 MySQL 连接挂起

php - mysql函数,当输入客户号码时返回带有字符串的所有地址

sql - Oracle:分层查询中的编号组

javascript - 如果代码返回错误不运行查询

php - 如何在 Eloquent 中创建后立即加载关系

mysql - 将远程 mysql 数据库连接到 Heroku Rails 应用程序

mysql - 表不能有带 auto_increment 的 2 字段主键

mysql - 没有字符的 SQL SELECT 项