我尝试使用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'];
}
但只显示数组的内容...
谢谢
您的代码存在几个问题:
- 使用别名命名结果集中的列,以便以后能够按名称对列进行寻址
SELECT COUNT(distinct p.id_paciente) AS count1, ...
^^^^^^
不要自己插值查询字符串。使用 Codeigniter 的查询绑定
这可能与您无关,但如果
dia_cita
有时间成分(即属于datetime
类型),您可能需要将WHERE
条件更改为
c.dia_cita >= ? AND c.dia_cita < ? + INTERVAL 1 DAY
- 不需要
foreach
循环。使用此查询,您始终只能获得一行。因此,请使用 Codeigniter 的row()
或row_array()
.
话虽如此,您的代码可能看起来像
$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'];