2013-05-08 70 views
1

因此,两个表中的问题:从一个表基于另一个表中选择不同的值

userinfo: id(PK), users_id(FK to users table), name, surname 

doctorpatient: id(PK), doctor_id(FK to users table), patient_id(FK to users table) 

的想法是每个医生通过doctorpatient表中分配了几个病人。我想要做的是返回数组的数组,其中每个内部数组包含此:

users_id(doctor), name(doctor), surname(doctor), users_id(patient), name(patient), surname(patient) 

可以这样甚至可以做到使用纯SQL?我试过这个:

SELECT userinfo.users_id, 
     userinfo.name, 
     userinfo.surname, 
     u2.users_id, 
     u2.name, 
     u2.surname 
FROM doctorpatient 
     RIGHT OUTER JOIN userinfo 
        ON doctorpatient.doctor_id = userinfo.users_id 
     LEFT OUTER JOIN userinfo AS u2 
        ON doctorpatient.patient_id = u2.users_id 

但是不管我尝试什么样的组合,它都不会出现正确的。我尝试在三个单独的查询中获取数据,然后以某种方式获得我需要使用PHP的结果,但是我没有得到任何结果。

编辑:我想是这样的:

array(
subarray1(patient_id1, 
      patient_name1, 
      patient_surname1, 
      doctor_id1, 
      doctor_name1, 
      doctor_surname1) 
subarray2(patient_id2, 
      patient_name2, 
      patient_surname2, 
      doctor_id1, 
      doctor_name1, 
      doctor_surname1) 
etc... 

,其中一个医生可以有多个病人。我的查询得到的结果如下:

array(
subarray1(patient_id1, 
      patient_name1, 
      patient_surname1, 
     ) 
subarray2(patient_id2, 
      patient_name2, 
      patient_surname2, 
     ) 
etc... 

但是大部分数据都是空的。

+0

什么是你想要得到什么? – Eugene 2013-05-08 16:31:12

+0

乍一看你的查询看起来正确。你能展示你的期望和你得到的是什么吗? – Barmar 2013-05-08 16:33:53

回答

2

我认为一个简单的JOIN可能就足够了。外部联接似乎导致空值,因为它试图将医生视为患者。

SELECT u1.users_id AS doctor_id, 
     u1.name AS doctor_name, 
     u1.surname AS doctor_surname, 
     u2.users_id AS patient_id, 
     u2.name AS patient_name, 
     u2.surname AS patient_surname 
FROM doctorpatient AS d JOIN userinfo AS u1 ON d.doctor_id = u1.users_id 
    JOIN userinfo AS u2 ON d.patient_id = u2.users_id 
+0

这似乎是朝着正确的方向,让我进一步测试 – Weatherman159 2013-05-08 16:56:07

+0

是的,这正是我所需要的。谢谢您的帮助。 – Weatherman159 2013-05-08 17:06:32

0

试试这个:

SELECT 
u.id as user_id, 
u.name as user_name 
u.surname as user_usrname 
d.id as doc_id, 
d.name as doc_name, 
d.surname as doc_surname 
FROM doctorpatient as dp 
LEFT JOIN userinfo as u ON (dp.pacient_id = u.id) 
LEFT JOIN userinfo as d ON (dp.doctor_id = d.id) 
+0

This throwows#1054 - Unknown column'dp.pacient_id'in'on clause' – Weatherman159 2013-05-08 16:53:40

+0

显然,这是一个“patient_id”的错字, – Blazemonger 2013-05-08 16:54:35

相关问题