У меня есть несколько таблиц, которые мне нужно запросить, чтобы получить все строки для определенного пользователя. Таблицы в основном похожа на этойLeft Join duplicates
contact
=======
id_contact PK
firstName
lastName
...
contact_phone
===============
id_contact_phone, PK
id_contact, FK
id_phone_type, FK
phone
...
phone_type
============
id_phone_type PK
phone_type
....
И есть куча таблиц похожа на те, за исключением того, что они для email
, phone
и т.д. Мне нужно, чтобы отобразить всю эту информацию для данного контакта, я использую несколько LEFT JOIN
но я не уверен, как выводить информацию.
Это мой запрос
SELECT contact.id_contact, contact.lastName, contact.firstName, contact_email.email, email_type.email_type, contact_phone.phone, phone_type.phone_type, contact_company.contact_title, company.company_name
FROM contact
LEFT JOIN contact_email
ON contact.id_contact = contact_email.id_contact
LEFT JOIN email_type
ON contact_email.id_email_type = email_type.id_email_type
LEFT JOIN contact_phone
ON contact.id_contact = contact_phone.id_contact
LEFT JOIN phone_type
ON contact_phone.id_phone_type = phone_type.id_phone_type
LEFT JOIN contact_company
ON contact.id_contact = contact_company.id_contact
LEFT JOIN company
ON contact_company.id_company = company.id_company
WHERE contact.id_contact = $cid
Моя проблема заключается в том, что если некоторый контакт имеет несколько номеров телефонов, электронной почты и т.д. запрос будет явно возвращать более 1 строку, так что я точно не знаю, как отобразить информация, поскольку большинство столбцов будут дублировать друг друга. Вот пример того, что этот запрос может вернуть
+===========================================================================================+
| id_contact | lastName | firstName | email | email_type | phone | phone_type |
+===========================================================================================+
| 1 | Doe | John | [email protected] | Work | 555-1234 | Work |
+------------+----------+-----------+------------------+------------+----------+------------+
| 1 | Doe | John | [email protected] | Work | 555-2222 | Mobile |
+-------------------------------------------------------------------+----------+------------+
| 1 | Doe | John | [email protected] | Personal | 555-1234 | Work |
+------------+----------+-----------+------------------+------------+----------+------------+
| 1 | Doe | John | [email protected] | Personal | 555-2222 | Mobile |
+-------------------------------------------------------------------+----------+------------+
Как я могу отобразить информацию в PHP без избыточных данных и может быть оптимизирован мой запрос?
Я не уверен, что вы спрашиваете здесь. Вы хотите, чтобы первые столбцы (id, lastName и firstName) были NULL? Почему этот результат не работает для вас?- должно быть построено таблицей с пустыми ячейками для «повторных данных» с этим набором результатов, – Artefacto
Я хочу отобразить информацию на странице профиля контакта с помощью 'mysql_fetch_array', но прямо сейчас, которая будет отображать только первую строку (которые будут отсутствовать) или если я использую цикл while, я не смогу сказать, являются ли электронные письма дублирующими. Я обновил свой пример – Serge
Довольно легко определить, являются ли они дублирующими, когда вы используете цикл: просто закажите их с предложением ORDER BY, а затем включите что-то вроде 'if ($ prev_value! = Row ['email']) {$ prev_value = строка ['email']; ...} 'и вставьте другой код обработки в ... часть. Если вы хотите сделать это с каждым полем, то по-прежнему довольно легко сделать что-то подобное с массивом предыдущих значений и просто обрабатывать каждый отдельно. –