我对第一篇文章感到非常抱歉,因为我没有解释所有内容。
基本上我有3个表,一个用于帖子,一个用于类别,&另一个用帖子链接类别。
我希望在单个MySQL查询中选择特定类别下的帖子。
posts(id,title,body)
---------------------
125,Some title,Blah blah
categories(id,name)
---------------------
1,politic
2,entertainment
linker(categoryid,postid)
---------------------
2,125
我希望在单个查询中通过示例获取娱乐类别中的帖子,该怎么做?
由于
答案 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)。