我需要查询帮助。
我有4张桌子
文章 - id,category_id,user_id
类别 - id
article_category - article_id,category_id
用户 - id
使用文章表中的category_id确定主要类别
现在我想获得所有文章,所以我使用下面的查询。
文章可以有多个类别。我希望看到附有主要类别信息的文章列表
选择a。*,c.title,c.slug
来自文章a,article_category ac,类别c,用户u
WHERE ac.article_id = a.category_id 应该是 ac.article_id = a.id
AND ac.category_id = c.id
AND a.user_id = u.id
AND ac.category_id ='1'
这个查询的问题是我得到了不正确的类别信息,我不认为我应该像下面那样运行子查询来解决它
(从id = a.category_id的类别中选择标题)作为标题
由于
答案 0 :(得分:0)
您的加入条款不正确。我用ANSI语法重写它以使其更具可读性,并且JOIN
子句更明确:
SELECT a.*, c.title , c.slug
FROM articles a
INNER JOIN article_category ac on ac.category_id = a.category_id
INNER JOIN categories c on ac.category_id = c.id
INNER JOIN users u on a.user_id = u.id
WHERE ac.category_id = '1'
顺便提一下,您正在联接users
表,但没有从中选择任何列,因此您可以删除该连接,除非您使用它来过滤结果。
答案 1 :(得分:0)
从查询中删除了users表(根本没有使用),将条件从ac.article_id = a.category_id更改为ac.category_id = a.category_id
SELECT a.*, c.title , c.slug
FROM articles a, article_category ac, categories c
WHERE ac.category_id = a.category_id
AND ac.category_id = c.id
AND ac.category_id = '1'
答案 2 :(得分:0)
select a.*, c.title, c.slug
from articles a
join article_category ac on a.id = ac.article_id
join categories c on ac.category_id = c.id
join users u on a.user_id = u.id
where c.id = 1
答案 3 :(得分:0)
你加入了article_id = category_id,这没有意义,试试吧:
SELECT a.*, c.title , c.slug FROM articles a, article_category ac, categories c, users u
WHERE ac.category_id = a.category_id
AND ac.category_id = c.id
AND a.user_id = u.id
AND ac.category_id = '1'