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

时间:2015-04-21 16:39:56

标签: php mysql sql mysqli

主要表:'帖子'。
结构:

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语句时,将从like表中获取post_ids:

"SELECT id FROM posts WHERE id IN (SELECT post_id FROM likes WHERE user_id=$userid)"

我做错了什么?请帮忙。非常感激。谢谢!

额外:

以ID的降序排序它们的任何方式?

如果我通过" p.id DESC"然后所有来自喜欢表的post_ids出现在底部。

例如,
邮政表中有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?谢谢!

2 个答案:

答案 0 :(得分:1)

使用JOIN

SELECT id FROM posts 
LEFT JOIN likes ON posts.id = likes.post_id 
WHERE likes.user_id = $userid

答案 1 :(得分:1)

如果你想从post表中获取LEFT JOIN id,你可以像这样在这个场景中尝试mysql ALL,否则简单的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