如何在单个查询中查询3个表?

时间:2010-11-14 01:03:19

标签: php sql mysql join

我对第一篇文章感到非常抱歉,因为我没有解释所有内容。

基本上我有3个表,一个用于帖子,一个用于类别,&另一个用帖子链接类别。

我希望在单个MySQL查询中选择特定类别下的帖子。

posts(id,title,body)
---------------------
125,Some title,Blah blah


categories(id,name)
---------------------
1,politic
2,entertainment

linker(categoryid,postid)
---------------------
2,125

我希望在单个查询中通过示例获取娱乐类别中的帖子,该怎么做?

由于

5 个答案:

答案 0 :(得分:3)

select 
     p.*
from 
     posts p
     inner join linker l on l.postid = p.id
     inner join categories c on c.categoryid = l.categoryid
where 
     c.name = 'entertainment'

答案 1 :(得分:0)

这是完全相同的事情,你只需加入3个表2的内容:

SELECT P.id post_id,
       P.title,
       P.body,
       C.id category_id,
       C.name
FROM posts P
INNER JOIN linker L
    ON P.id = L.postid
INNER JOIN categories C
    ON L.categoryid = C.id
WHERE C.name = 'Category'

不要害怕做自己的测试。如果您了解如何连接两个表,您应该了解如何连接三个,四个以及更多。

答案 2 :(得分:0)

以下SQL语句应该为您提供了尝试的基础。

select p.*
from posts p
inner join linker l
on l.postid = p.id
inner join categories c
on l.categoryid = c.id
where c.name = 'entertainment'

答案 3 :(得分:0)

如果帖子属于2个类别,您仍然可以在select语句中使用pinkfloydx33的DISTINCT查询:

select 
     DISTINCT p.*
from 
     posts p
     inner join linker l on l.postid = p.id
     inner join categories c on c.categoryid = l.categoryid
where 
     c.name = 'entertainment'

结果集只显示一条记录。

答案 4 :(得分:0)

如果您只在WHERE子句中指定一个类别,那么每个帖子ID的结果将是一行。

无论哪种方式,当结果可能每个ID超过一​​行时,您可以使用DISTINCT或GROUP BY,但在这种情况下,我更喜欢第二个(GROUP BY)。