Я пытаюсь вывести список имен контактов с их номером телефона и адресом электронной почты для данной компании.MySQL Сложные контакты Таблица
Проблема я столкнулся становится его выход контакта на основе следующих критериев:
Контакты может или не может иметь имя, адрес электронной почты или телефон, но они должны иметь по крайней мере один из них, чтобы появиться в результатах.
В компании может быть более одного контакта.
Может быть более одного адреса электронной почты и/или номера телефона на контакт.
На контактах есть первичный флаг, поэтому, если имеется более одного контакта, и один из них является первичным, он должен выбрать тот, а не другой, не первичный.
Я попытался следующий для получения контактов имени, но без успеха:
SELECT entity_details.name,
COALESCE(
(SELECT entity_contacts.name FROM entity_contacts
WHERE entity_contacts.entityRef = entity_details.id
ORDER BY entity_contacts.isPrimary = 1),
(SELECT entity_contacts.name FROM entity_contacts
WHERE entity_contacts.entityRef = entity_details.id)
)
AS contact
FROM entity_details
WHERE entity_details.ownerRef = ?
Это ближе всего я могу добраться до, но я неуверен, если это правильно или нет, и это не приоритет первичных контактов, он просто выбирает любые и группы на EntityRef для удаления дубликатов:
SELECT
entity_details.name, entity_contacts.name AS contact,
entity_contacts_telephones.tel, entity_contacts_emails.email
FROM entity_details
LEFT JOIN entity_contacts ON entity_details.id = entity_contacts.entityRef
LEFT JOIN entity_contacts_telephones ON entity_contacts.id = entity_contacts_telephones.contactRef
LEFT JOIN entity_contacts_emails ON entity_contacts.id = entity_contacts_emails.contactRef
WHERE entity_details.ownerRef = ?
GROUP BY entity_contacts.entityRef
LIMIT ?, ?
Все таблицы Innobd, те, с которыми я работаю, находятся в приведенном выше правиле. Все ссылки и т. Д. Имеют индексы, где не обязательно.
В объектах entity_details около 13000 строк, 12000 в entity_contacts и несколько 1000 в объектах entity_contacts_telephones и entity_contacts_emails.
Я думал, что следующий будет работать, но это не делает:
LEFT JOIN entity_contacts_telephones
ON entity_contacts.id = entity_contacts_telephones.contactRef
AND COALESCE(entity_contacts_telephones.isPrimary = 1, 0)
Сколько может существовать сущность в таблице 'details'? Сколько вы хотите показать? –
entity_details - это компании, я хочу показать только один контакт (предпочтительно основной) на строку. Надеюсь, у меня есть смысл. – imperium2335