我正在获取产品和该产品所属的类别以显示在页面上。我还得到了一些属于不同表中产品的数据。
我的查询是这样的:
SELECT cnt.id as content_id, cnt.title as content_title, cnt.featured, cnt.alias as content_alias, cnt.catid, cnt.images, cnt.state, cnt.introtext, cat.id as cat_id, cat.title as cat_title, cat.alias as cat_alias,
MAX(case when f.field_id = 4 then f.value end) as prijs,
MAX(case when f.field_id = 5 then f.value end) as prijsoud
FROM snm_fields_values f
JOIN snm_content cnt
ON cnt.id = f.item_id
JOIN snm_categories cat
ON cnt.catid = cat.id
WHERE cnt.catid = '17'
AND cnt.state = 1
GROUP BY f.item_id
我的问题是,当一个类别下没有任何文章时,所有结果都是空的。因此,在没有属于该类别的产品的类别页面上,它也不会显示类别标题。
只有当类别下有产品(snm_content)时,才会显示所有数据。
以上查询返回以下内容:
catid 17 下没有产品。
当我将它更改为 16(它确实有产品)时,这是我的结果:
我想获取那里的所有数据,所以当一个类别没有产品时,我仍然需要类别标题。
为什么产品不存在时一切都是空的?
最佳答案
我认为您需要外部联接。我不完全理解 GROUP BY
,但这可能会做你想做的:
SELECT cnt.id as content_id, cnt.title as content_title, cnt.featured, cnt.alias as content_alias, cnt.catid, cnt.images, cnt.state, cnt.introtext, cat.id as cat_id, cat.title as cat_title, cat.alias as cat_alias,
MAX(case when f.field_id = 4 then f.value end) as prijs,
MAX(case when f.field_id = 5 then f.value end) as prijsoud
FROM snm_categories cat LEFT JOIN
snm_content cnt
ON cnt.catid = cat.id AND cnt.state = 1 LEFT JOIN
snm_fields_values f
ON cnt.id = f.item_id
WHERE cat.id = 17
GROUP BY cnt.id, cnt.title, cnt.featured, cnt.alias, cnt.catid, cnt.images, cnt.state, cnt.introtext, cat.id, cat.title, cat.alias
关于mysql - 为什么使用此查询时我的结果为空,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49693551/