我试图用3个表来显示数据
posts
- id
- category_id
- user_authors_id
- title
- status
user_authors
- id
- author_name
categories
- id
- name
subcategories
- id
- name
我想做的是。我正在创建一个视图面板来显示文章。所以,我用了3张table。从user\u authors我将获得作者名称,从categories表我将获得类别名称,现在类别表有子类别id,所以我还想获得子类别名称。
我在教室里有两排 posts
id为的表 29 and 30
但是当我运行下面的查询时,它显示了两个具有相同数据的条目。
SELECT
posts.id,
categories.name AS cat_name,
subcategories.name AS subcat_name,
posts.title,
user_authors.author_name,
posts.created,
posts.status
FROM posts
INNER JOIN user_authors ON (user_authors.id = posts.user_author_id)
INNER JOIN categories ON(posts.category_id = categories.id)
INNER JOIN subcategories ON (categories.id = subcategories.category_id)
但是,如果我删除这个声明 INNER JOIN subcategories ON (categories.id = subcategories.category_id)
并运行查询,它运行完美,所有行都正确显示。
发生了什么事,我不是想得到它。哪里是错误的查询,也没有显示错误。
1条答案
按热度按时间jljoyd4f1#
实际上,要使查询返回所需的结果,子类别中必须有且只有一条记录与给定的匹配
post
:如果不止一个
subcategory
匹配给定的post
,的post
行将在结果中重复如果没有
subcategory
匹配给定的post
,的post
不会出现在结果中根据您的用例,您需要:
不去
JOIN subcategory
,以避免重复post
sLEFT JOIN subcategory
而不是INNER JOIN subcategory
避免posts
没有subcategory
过滤掉如果给定的文章有多个子类别,但仍希望在结果中显示一行,则可以使用
GROUP_CONCAT
聚合函数来连接subcategories
进入一个领域: