mysql - 关于显示类别广告计数器的给定查询有什么问题?

标签 mysql asp.net count

我有一个 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/

相关文章:

java - 此 select 语句的正确 Derby SQL 语法是什么?

c# - 在 asp.net (C#) 的 SQL 查询中使用变量

mysql - 如何将 MySQL MEMORY 存储引擎与 Knex 结合使用?

php - 将空值插入索引数据库的问题

php - wordpress获取mysql表

mysql - mysql 查询 : couple of conditions matching in the same column

mysql - 根据 1 个字段或另一个字段选择计数 - 条件计数

asp.net - ViewState vs cookie vs cashing vs session

c# - 检测到 ASP.NET MVC 5 危险的 Request.Path

excel - 如何计算excel中的元素