mysql - 结果sql为空时返回0

标签 mysql sql codeigniter

当结果集为空时,我可以返回0作为结果吗

SELECT 
  SUM(`Uren`),
  SUM(`Minuten`) 
FROM
  `Uren` 
  RIGHT JOIN `Project` 
    ON `Project`.`idProject` = `Uren`.`idProject` 
  RIGHT JOIN `Uursoort` 
    ON `Uursoort`.`idUursoort` = `Uren`.`idUursoort` 
WHERE `idKlant` = 5 
  AND `Uren`.`Datum` > '2014-04-02' 
GROUP BY `Uren`.`idProject` 

首选输出(而不是空结果集):

sum('Uren')     sum('Minuten')
0               0

当我这样做时:

SELECT 
  SUM(`Uren`),
  SUM(`Minuten`) 
FROM
  `Uren` 
  RIGHT JOIN `Project` 
    ON `Project`.`idProject` = `Uren`.`idProject` 
  RIGHT JOIN `Uursoort` 
    ON `Uursoort`.`idUursoort` = `Uren`.`idUursoort` 
WHERE `idKlant` = 5 
  AND `Uren`.`Datum` > '2014-04-02' 
GROUP BY `Uren`.`idProject 

因为有数据,所以我得到了正确的输出。但我需要得到 0 作为返回。 我也在模型中尝试过这个:

    function rapport_detail_uren($idKlant,$start,$eind){
            $this->db->select_sum('Uren');
            $this->db->select_sum('Minuten');
            $this->db->from('Uren');
            $this->db->join('Uursoort','Uursoort.idUursoort=Uren.idUursoort','right');
            $this->db->join('Project','Project.idProject=Uren.idProject','right');
            if ($idKlant > 0){
            $this->db->where('idKlant',$idKlant);}  
if ($start != NULL){
        $this->db->where('Uren.Datum >=', $start);
        }

            $this->db->group_by('Uren.idProject');

            $query = $this->db->get();
            if($query->num_rows()>0){
                return $query->result();
            }
            else{
                return 0;
            }
    }

最后一行返回 0。我想这可能会返回值 0,但这不起作用

最佳答案

您可以通过移动where来做到这一点条件进入on除最后一个表之外的所有表的子句(因为您正在使用 right outer join :

SELECT coalesce(SUM(`Uren`), 0), coalesce(SUM(`Minuten`), 0)
FROM `Uren` RIGHT JOIN
     `Project` 
      ON `Project`.`idProject` = `Uren`.`idProject` AND
         `Uren`.`Datum` > '2014-04-02' RIGHT JOIN
     `Uursoort` 
      ON `Uursoort`.`idUursoort` = `Uren`.`idUursoort` 
WHERE `idKlant` = 5 AND 
GROUP BY `Uren`.`idProject`;

就我个人而言,我发现left outer join更容易遵循(“保留第一个表中的所有行”与“保留最后一个表中的所有行”),但同样的原则适用:where条件可以将外连接转变为内连接,因为外连接会生成意外的 NULL值。

您可能还需要移动 idklanton条款。我质疑你为什么按 uren.idProject 进行聚合,其中可能有 NULL值。

关于mysql - 结果sql为空时返回0,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23241549/

相关文章:

php - 从表中选择所有属性和某些属性在 codeigniter 中得到不同的结果

.net - MySql .Net 连接器是特定于版本的

php - mysqli 返回具有相同 id 的多行数据

mysql - 否定sql查询返回的整数

php - 如何在 CodeIgniter 中进行基于角色的访问控制?

PHP MYSQL 防止数据库前端出现重复结果

php - 如何计算所选表中具有空字段的所有记录

mysql - 显示错误页面时出错 : Application Instantiation Error: Table 'XXXX.XXX_session' doesn't exist

sql - 如何保护 SQL Server 存储过程

sql - 将分号分隔的列拆分为多列