Codeigniter:在查询中显示两个具有distinct和count的数据

时间:2015-03-14 00:24:40

标签: php mysql codeigniter

我尝试使用codeigniter显示一个查询的两个数据。

$query = "SELECT  count(distinct p.id_paciente), count(c.pacientes_id_paciente) FROM paciente p, cita c WHERE p.id_paciente=c.pacientes_id_paciente AND p.usuarios_id_usuario=43 AND p.aseguradoras_id_aseguradora=8 AND c.dia_cita>='2015-04-16' AND c.dia_cita<='2015-04-16'";

    $sql = $this->db->query($query);

如何显示计数的两个结果(不同的p.id_paciente)和计数(c.pacientes_id_paciente)

我尝试使用

foreach ($sql->result_array() as $row)

{

echo $row['id_paciente'];

echo $row['pacientes_id_paciente'];

}

但只显示数组的内容......

由于

1 个答案:

答案 0 :(得分:1)

您的代码存在以下问题:

  1. 使用别名命名结果集中的列,以便以后按名称
  2. 解决这些问题
        SELECT  COUNT(distinct p.id_paciente) AS count1, ...
                                                 ^^^^^^
    
    1. 不要自己插入查询字符串。使用Codeigniter的查询绑定

    2. 这可能与您无关,但如果dia_cita有时间组件(即类型为datetime),您可能希望将WHERE条件更改为< / p>

    3.     c.dia_cita >= ? AND c.dia_cita < ? + INTERVAL 1 DAY
      
      1. 不需要foreach循环。您始终只使用此查询获得一行。因此,请使用Codeigniter的row()row_array()
      2. 据说你的代码可能看起来像

        $sql = "
            SELECT COUNT(DISTINCT p.id_paciente) AS count1, 
                   COUNT(c.pacientes_id_paciente) AS count2 
              FROM paciente p JOIN cita c 
                ON p.id_paciente = c.pacientes_id_paciente
             WHERE p.usuarios_id_usuario = ? 
               AND p.aseguradoras_id_aseguradora = ? 
               AND c.dia_cita >= ? 
               AND c.dia_cita < ? + INTERVAL 1 DAY
        ";
        
        $bindings = array(43, 8, '2015-04-16', '2015-04-16')
        
        $row = $this->db
            ->query($sql, $bindings)
            ->row_array();
        
        echo $row['count1'], $row['count2'];