Pavel_M
Новичок
Вопрос с JOIN
Доброго вечера господа.
Столкнулся с таким вопросом. Попробую описать сразу с примера.
Рассмотрим такую схему:
table user
------
user_id
user_name
table doctor
------
doctor_id
doctor_name
table vopros
------
vopros_id
vopros_client_id
vopros_doctor_id
vopros_text
vopros_otvet
Получается 3 таблицы. Запрос будет следующего характера:
SELECT *
FROM vopros
JOIN user ON user.user_id = vopros.vopros_client_id
JOIN doctor ON doctor.doctor_id = vopros.vopros_doctor_id
WHERE vopros.vopros_client_id <> vopros.vopros_doctor_id
ORDER BY vopros.vopros_id DESC
Все работает замечательно. Но в реальном случае таблица с юзерами одна и называется просто user.
Получается такая схема:
table user
------
user_id
user_name
user_type
table vopros
------
vopros_id
vopros_client_id
vopros_doctor_id
vopros_text
vopros_otvet
SELECT *
FROM vopros
JOIN user ON user.user_id = vopros.vopros_client_id
JOIN user ON user.user_id = vopros.vopros_doctor_id
WHERE vopros.vopros_client_id <> vopros.vopros_doctor_id
ORDER BY vopros.vopros_id DESC
И уже такая схема не работае, оно и очевидно. Так как же сделать так, чтобы связи не были потеряны? На данным момент только остался один JOIN связывающий идентификатор по клиенту. А если запись доктора "случайно" удалиться?
-~{}~ 02.10.10 22:47:
Использовать подзапросы?
-~{}~ 02.10.10 22:51:
Получается так:
(реальный пример может отличаться от вышенаписанного)
SELECT *
FROM vopros
JOIN user ON user.user_id = vopros.vopros_client_id
WHERE vopros.vopros_client_id <> vopros.vopros_doctor_id
AND vopros_doctor_id = (SELECT user_id FROM user WHERE vopros_doctor_id = user_id)
ORDER BY vopros.vopros_id DESC
-~{}~ 02.10.10 22:54:
Но тут уже проблемы с вытаскиванием имени для юзера через один запрос
Доброго вечера господа.
Столкнулся с таким вопросом. Попробую описать сразу с примера.
Рассмотрим такую схему:
table user
------
user_id
user_name
table doctor
------
doctor_id
doctor_name
table vopros
------
vopros_id
vopros_client_id
vopros_doctor_id
vopros_text
vopros_otvet
Получается 3 таблицы. Запрос будет следующего характера:
SELECT *
FROM vopros
JOIN user ON user.user_id = vopros.vopros_client_id
JOIN doctor ON doctor.doctor_id = vopros.vopros_doctor_id
WHERE vopros.vopros_client_id <> vopros.vopros_doctor_id
ORDER BY vopros.vopros_id DESC
Все работает замечательно. Но в реальном случае таблица с юзерами одна и называется просто user.
Получается такая схема:
table user
------
user_id
user_name
user_type
table vopros
------
vopros_id
vopros_client_id
vopros_doctor_id
vopros_text
vopros_otvet
SELECT *
FROM vopros
JOIN user ON user.user_id = vopros.vopros_client_id
JOIN user ON user.user_id = vopros.vopros_doctor_id
WHERE vopros.vopros_client_id <> vopros.vopros_doctor_id
ORDER BY vopros.vopros_id DESC
И уже такая схема не работае, оно и очевидно. Так как же сделать так, чтобы связи не были потеряны? На данным момент только остался один JOIN связывающий идентификатор по клиенту. А если запись доктора "случайно" удалиться?
-~{}~ 02.10.10 22:47:
Использовать подзапросы?
-~{}~ 02.10.10 22:51:
Получается так:
(реальный пример может отличаться от вышенаписанного)
SELECT *
FROM vopros
JOIN user ON user.user_id = vopros.vopros_client_id
WHERE vopros.vopros_client_id <> vopros.vopros_doctor_id
AND vopros_doctor_id = (SELECT user_id FROM user WHERE vopros_doctor_id = user_id)
ORDER BY vopros.vopros_id DESC
-~{}~ 02.10.10 22:54:
Но тут уже проблемы с вытаскиванием имени для юзера через один запрос