编辑
将所有查询合并到一个select-like中是否更好 select (select...) as q1, (select...) as q2
结束编辑
我需要为一年中的每个月运行以下相同的查询。
每个查询之间的区别只是添加了一个 group by
或者消除一种症状。
第一个问题:我需要计算总访问量
SELECT
count(*)
from
visit
where
visit_status='Active'
AND
month(visit.date_of_visit)=month(:selectedDate)
AND
year(visit.date_of_visit)=year(:selectedDate)
当然 :selectedDate
将由php中的绑定值设置。
第二个查询:是关于计算病人的数量(而不是就诊次数),只需添加 group by visit.patient_id
```
SELECT
count(*)
from
visit
where
visit_status='Active'
AND
month(visit.date_of_visit)=month(:selectedDate)
AND
year(visit.date_of_visit)=year(:selectedDate)
group by visit.patient_id
然后我会用 `rowCount` 得到的结果作为返回值是由于 `group by` .
同样的查询应该重复,但现在没有日期,这意味着从第一次在系统上注册数据开始计数:
SELECT
count(*)
from
visit
where
visit_status='Active'
group by visit.patient_id
我使用以下方法没有错误,但是有没有更好的方法来做到这一点,并通过最小化查询数量来减少服务器上的负载?
2条答案
按热度按时间jdgnovmf1#
试试这个。
btqmn9zl2#
假设
patient_id
永远不会NULL
,则应将查询编写为:这是一种更好的编写查询的方法,特别是当您关心性能时:
这可以利用上的索引
visit(visit_status, date_of_visit, patient_id)
.你只是在返回你真正想要的——也就是说,唯一的病人的数量。
您可以删除
where
条件on date以获取所有日期。