【发布时间】:2016-08-23 22:43:03
【问题描述】:
我有 3 张桌子在分配。 第一张表: 患者:patid、fname、lname、recordnum。 PATIENTDR:patid,drid, PATIENTCLIN:patid,临床。
如果 DRID="$docotr->id" 或 "PATIENTCLIN" 如果 CLINID="$clinic- 在表 "PATIENTDR" 中找到表 "PATIENT" 中的 "PATID",我需要按 fname 或 lname 选择患者>临床”
这是我的查询
SELECT t1.* FROM patient t1
WHERE patlname like '{$search_patlname}%'
AND patfname like '{$search_patfname}%'
AND
(
EXISTS
(SELECT patid FROM patientdr t2 WHERE t2.drid = '{$doctor->id}' AND t2.patid = t1.patid)
OR EXISTS
(SELECT patid FROM patientclin t3 WHERE t3.clinid = '{$clinic->clinid}' AND t3.patid = t1.patid)
)
LIMIT 10
患者数量可能非常多,将使用 ajax 检索数据并考虑以下注意事项:
“在 MySQL 中使用 EXISTS 条件的 SQL 语句效率非常低,因为子查询对外部查询表中的每一行都重新运行。有更有效的方法来编写大多数查询,不使用 EXISTS条件。”
是否有更有效的方法来编写此查询,也许我应该打破规则并将患者 fname 和 lname 插入表 patientdr 和 patientclin 以减少响应时间,或者将结果限制为 10 行是否足够有效? 提前感谢您提供的各种帮助。
【问题讨论】:
-
如果你在内部加入它们并且 id 没有匹配,那么它们将不会在结果中返回。我想那会是最有效的。