php - mysql select 总计不存在

标签 php mysql

我试图统计所有缺失翻译的数量,但我真的迷失了如何去做。

表格:

  • 语言(language_id、名称)
  • 产品 (product_id)
  • product_translations(产品 ID、语言 ID、名称)

管理员变得非常懒惰,我希望能够向他们显示缺少翻译的数量。

我想这样做的一个非常简单的方法就是获取总数(语言->计数 * 产品->计数),但我想分别返回每个产品的计数。

最佳答案

要执行此类查询,请从包含所有组合的driver 表(子查询)开始。然后删除有翻译的:

select driver.*
from (select distinct l.language_id, p.product_id
      from languages l cross join
           products p
     ) driver left outer join
     translations t
     on t.language_id = driver.language_id and
        t.product_id = driver.product_id
where t.language_id is null;

这使用左外连接,它将所有内容保留在driver表中。如果没有匹配项,则 translations 中的列将为 NULL —— where 子句仅保留这些列。

如果每个表中的值是唯一的,则子查询中可能不需要 distinct

请注意:上面是我编写查询的首选方式,因为我认为它的意图是最清晰的。但是,MySQL实际上实现了子查询。因此,如果两个引用表中的列是唯一的,则以下内容会更有效:

select l.*, p.*
from languages l cross join
     products p left outer join
     translations t
     on t.language_id = l.language_id and
        t.product_id = p.product_id
where t.language_id is null;

关于php - mysql select 总计不存在,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17721916/

相关文章:

php - While 循环仅在第一次运行时有效

php - 手机中的 post padding-top 太大

php - 显示来自动态下拉列表框的图像

php - 如何在 PECL 上设置或跳过包配置?

php - laravel Eloquent 整数在 mssql 中作为字符串返回

java - 验证连接的数据库 - Java 持久性 API

mysql - 按周获取产品销量,如 week1、week2、week3、week4

mysql - 将一个表的属性内容复制到不同数据库中的另一个表的属性

php - mysqli_query 不显示任何结果

php - 较旧的 PHP 版本修复