php - 如果ID存在于第二张或第三张表中,如何高效地从第一张表中进行选择?

标签 php mysql

我有 3 个表在分配中。 第一张表: 患者:patid、fname、lname、recordnum。 PATIENTDR:脸色苍白,口干舌燥, PATIENTCLIN: patid, clinid.

如果 DRID="$docotr->id"或 "PATIENTCLIN"如果 CLINID="$clinic->诊所”

这是我的查询

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条件。”

有没有更有效的方法来编写这个查询,也许我应该打破规则,在表 patientdr 和 patientclin 中插入患者 fname 和 lname 以减少响应时间,或者通过将结果限制为 10 行就足够有效了? 提前感谢您提供的各种帮助。

最佳答案

如评论中所述,这可以通过简单的 INNER JOIN 解决:

SELECT t1.* 
FROM patient t1
INNER JOIN (
    SELECT patid 
    FROM patientdr t2 
    WHERE t2.drid = '{$doctor->id}' 
    UNION DISTINCT
    SELECT patid 
    FROM patientclin t3 
    WHERE t3.clinid = '{$clinic->clinid}'
) i
ON t1.patid = i.patid
WHERE patlname like  '{$search_patlname}%' 
AND patfname like '{$search_patfname}%' 
LIMIT 10

如果您还没有阅读有关 INNER JOIN 的文档,花时间阅读并尝试使用它的一些查询是值得的。

祝你好运!

关于php - 如果ID存在于第二张或第三张表中,如何高效地从第一张表中进行选择?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39111814/

相关文章:

mysql 正则表达式来匹配路径

php - 如何终止 PHP session ?

php - MySQL/PHP,但更多的是数学问题(缩短脚本)

php - Mysql 多条件查询结果

php - 电子邮件消息不显示 mysql 列

java - Hibernate 序列生成器因为多个实体共享而感到困惑

php - 如何使用 PHP 通过 ZOHO api 发送电子邮件?

php - 表单未填写表格并返回空白页

php - 工厂的目的是什么?

php - 连接到数据库的下拉菜单