我有一个 asp.net 网站,用户可以在其中转换广告。在那里我想显示每个类别的广告计数器。我正在使用 MYSQL 数据库。
目前我正在使用这个查询来做到这一点
SELECT
type.`type_id_pk`,
type.`name`,
COUNT(head.`header_id_pk`) AS `count`
FROM
`testdb`.`type` AS `type`
LEFT JOIN `header` AS head
ON head.`type_id_fk` = type.`type_id_pk`
GROUP BY type.`type_id_pk`
ORDER BY `name` ASC ;
以上查询工作正常。但在我的网站上,我将广告按国家/地区分开。所以我想专门为一个国家展示广告计数器。为此,我将上面的查询修改为这样
SELECT
type.`type_id_pk`,
type.`name`,
COUNT(head.`header_id_pk`) AS `count`
FROM
`testdb`.`type` AS `type`
LEFT JOIN `header` AS head
ON head.`type_id_fk` = type.`type_id_pk`
WHERE head.`country_id_fk` = _country_id
GROUP BY type.`type_id_pk`
ORDER BY `name` ASC ;
_country_id 是我插入特定国家/地区 ID 的地方。所以从上面的查询中它只返回有广告的行。如果没有该类别不显示的广告。 所以我想显示所有类别及其针对特定国家/地区的计数器。(包括 0 个广告类别)。那么上面的查询有什么问题? (请考虑查询效率。)
最佳答案
从本质上讲,您的代码似乎强制执行内部联接,因此排除了空结果。您可以尝试使用 LEFT OUTER JOIN
来包含空结果,并减轻 WHERE
子句中的限制以清除空结果。
LEFT OUTER JOIN `header` AS head
ON head.`type_id_fk` = type.`type_id_pk`
WHERE head.`country_id_fk` = _country_id OR head.`country_id_fk` IS NULL
关于mysql - 关于显示类别广告计数器的给定查询有什么问题?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30241907/