Weatherman159
Weatherman159

Reputation: 15

Select different values from one table based on another table

So, the two tables in question:

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)

The idea is each doctor is assigned a few patients via the doctorpatient table. What I want to do is return an array of arrays, where each of the inner arrays contains this:

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

Can this even be done using purely SQL? I tried this:

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 

but no matter what combination of joins I try, it never comes out right. I tried getting the data in three separate queries and then somehow get the result I need using PHP, but I got nowhere with that.

Edit: What I want is this:

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...

where one doctor can have multiple patients. What my query gets me looks something like this:

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

But most of the data is null.

Upvotes: 1

Views: 421

Answers (2)

Blazemonger
Blazemonger

Reputation: 92893

I think a simple JOIN may be sufficient. The OUTER JOINs appear to be causing the null values because it tries to treat the doctors as patients.

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

Upvotes: 2

Eugene
Eugene

Reputation: 1959

Try this:

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)

Upvotes: 0

Related Questions