2013-05-08 4 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, но я ничего не получил.

Edit: То, что я хочу это:

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

+0

На первый взгляд ваш запрос выглядит правильно. Можете ли вы показать, чего вы ожидаете и что получаете вместо этого? – Barmar

ответ

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

+0

да, это делает именно то, что мне нужно для этого. Спасибо за помощь. – Weatherman159

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

это броски # 1054 - Неизвестный столбец «dp.pacient_id» в разделе «on» – Weatherman159

+0

Очевидно, что это опечатка «patient_id» – Blazemonger

Смежные вопросы