#php #mysql #pdo
#php #mysql #pdo
Вопрос:
Я хочу показать все мои записи doctors с их отношениями с другими таблицами, но отображается только одна запись из этих отношений, например, из контактов; у нее два контакта, но только один отображается для доктора. Как я могу показать все это?
$sql = "SELECT doctors.name, doctors.floor, doctors.room_no, doctors.clinic_address,
doctors_schedules.schedule,
doctors_contacts.contact_number, doctors_specialties.specialties_id FROM doctors
INNER JOIN doctors_schedules ON doctors.id = doctors_schedules.doctor_id
INNER JOIN doctors_contacts ON doctors.id = doctors_contacts.doctor_id
INNER JOIN doctors_specialties ON doctors.id = doctors_specialties.doctor_id
GROUP BY doctors.id";
$stmt = $db->prepare($sql);
$stmt->execute();
return $stmt->fetchAll();
Комментарии:
1. То, что вы просите (один ко многим, многие ко многим и т. Д.), — Это Идеи, основанные на шаблонах проектирования. PHP PDO — это драйвер для подключения к базе данных. Это взаимоисключающие идеи. Если вы хотите показать отношения, вам следует изучить что-то вроде Doctrine или Eloquent
Ответ №1:
Используйте, например, DISTINCT и GROUP_CONCAT, вы можете добавить свой собственный seperatr и упорядочить список
$sql = "SELECT doctors.name, doctors.floor, doctors.room_no, doctors.clinic_address,
GROUP_CONCAT(DISTINCT doctors_schedules.schedule),
GROUP_CONCAT(DISTINCT doctors_contacts.contact_number),
GROUP_CONCAT(DISTINCT doctors_specialties.specialties_id)
FROM doctors
INNER JOIN doctors_schedules ON doctors.id = doctors_schedules.doctor_id
INNER JOIN doctors_contacts ON doctors.id = doctors_contacts.doctor_id
INNER JOIN doctors_specialties ON doctors.id = doctors_specialties.doctor_id
GROUP BY doctors.id";
$stmt = $db->prepare($sql);
$stmt->execute();
return $stmt->fetchAll();
Комментарии:
1. сэр, я уже пробовал GROUP_CONCAT вчера, но он повторяет значения контактов, расписания и специальностей [GROUP_CONCAT(doctors_specialties.specialties_id)] => 11,10,10,11,9,11,9,10,10,9,11,9 ) это выглядит так, сэр
2. @antonseverino FWIW, мне кажется безумным объединять данные, которые затем будут проанализированы с помощью кода приложения — но что бы ни плыло, ваша лодка.