我正在尝试使用3个表显示数据
posts
- id
- category_id
- user_authors_id
- title
- status
user_authors
- id
- author_name
categories
- id
- name
subcategories
- id
- name
我想做的是。我正在创建一个显示帖子的查看面板。因此,我正在使用3张桌子。从user_authors中,我将获得作者名称;从类别表中,我将获得类别名称;现在,类别表中有子类别ID,因此,我也想获得该子类别名称。
我在具有posts
ID的表中有两行,29 and 30
但是当我运行以下查询时,它显示具有相同数据的2个条目。
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)
并运行查询,则它运行完美,所有行均正确显示。
发生了什么事,我不是想得到它。查询在哪里出错,也没有显示错误。
INNER JOIN subcategories ON (categories.id = subcategories.category_id)
实际上,要让您的查询返回您期望的结果,子类别中必须有一个且只有一个记录与给定的匹配post
:
subcategory
匹配给定post
,则该post
行将在结果中重复subcategory
给定的匹配项post
,post
则不会出现在结果中根据您的用例,您需要:
JOIN subcategory
,以避免重复post
sLEFT JOIN subcategory
而不是INNER JOIN subcategory
避免posts
不subcategory
被过滤掉如果给定帖子确实有多个子类别,而您仍想在结果中显示一行,则可以使用GROUP_CONCAT
聚合功能将并置subcategories
为一个字段:
SELECT
posts.id,
categories.name AS cat_name,
GROUP_CONCAT( subcategories.name, ', ') AS subcat_names,
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)
LEFT JOIN subcategories ON (categories.id = subcategories.category_id)
GROUP BY
posts.id,
categories.name,
posts.title,
user_authors.author_name,
posts.created,
posts.status
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句