我有以下查询,从中可以得到预期的结果,问题是返回数据需要很长时间,我知道速度慢是由于下一行
(select fecha_hora
from horas
where horas.consulta_id = consultas.id
AND fecha_hora >= NOW()
AND horas.estado = 0
ORDER BY fecha_hora limit 0, 1) as hora
我不知道该怎么解决。
目标是获取最接近医生拥有的实际可用日期(有些医生没有空房)的日期和时间
select `medicos`.`id` as `med_id`
, `medicos`.`estado` as `med_estado`
, `medicos`.`descripcion`
, `clinicas`.`nombre` as `cli_nombre`
, `clinicas`.`direccion` as `cli_direccion`
, `regiones`.`nombre` as `region`
, `comunas`.`nombre` as `comuna`
, (select fecha_hora
from horas
where horas.consulta_id = consultas.id
AND fecha_hora >= NOW()
AND horas.estado = 0
ORDER BY fecha_hora
limit 0, 1) as hora
from `consultas`
inner join `consulta_especialidad`
on `consulta_especialidad`.`consulta_id` = `consultas`.`id`
inner join `especialidades`
on `especialidades`.`id` = `consulta_especialidad`.`especialidad_id`
inner join `medicos`
on `medicos`.`id` = `consultas`.`medico_id`
inner join `clinicas`
on `clinicas`.`id` = `consultas`.`clinica_id`
inner join `regiones`
on `regiones`.`id` = `clinicas`.`region_id`
inner join `comunas` on `comunas`.`id` = `clinicas`.`comuna_id`
where `medicos`.`estado` != 5
and `clinicas`.`region_id` = 15
and `especialidades`.`id` = 116
group by `medicos`.`id`
order by `medicos`.`estado` desc
, -`hora` desc, `medicos`.`nombres` asc
, `medicos`.`apellidos` asc
答案 0 :(得分:0)
不是答案。评论太久了...
FWIW,我觉得这更容易阅读...
SELECT m.id med_id
, m.estado med_estado
, m.nombre_completo med_nombre_completo
, m.seguridad med_seguridad
, m.foto_perfil med_foto_perfil
, m.genero med_genero
, m.descripcion
, l.nombre cli_nombre
, l.direccion cli_direccion
, l.id cli_id
, l.telefono cli_telefono
, l.link_agenda cli_link_agenda
, r.nombre region
, c.nombre comuna
, (SELECT fecha_hora
FROM horas h
WHERE h.consulta_id = k.id
AND fecha_hora >= NOW()
AND h.estado = 0
ORDER
BY fecha_hora
LIMIT 0,1
) hora
FROM consultas k
JOIN consulta_especialidad ke
ON ke.consulta_id = k.id
JOIN especialidades e
ON e.id = ke.especialidad_id
JOIN medicos m
ON m.id = k.medico_id
JOIN clinicas l
ON l.id = k.clinica_id
JOIN regiones r
ON r.id = l.region_id
JOIN comunas c
ON c.id = l.comuna_id
WHERE m.estado != 5
AND l.region_id = 15
AND e.id = 116
GROUP
BY m.id
ORDER
BY m.estado DESC
, -hora DESC -- ISN'T THIS THE SAME AS ASC???
, m.nombres ASC
, m.apellidos ASC
观察:您有一个GROUP BY子句,但没有聚合函数。这是灾难的秘诀。