我想輸出聯繫人名稱列表與他們的電話號碼和電子郵件地址給定的公司。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行,entity_contacts中有12000個,entity_contacts_telephones和entity_contacts_emails中有1000個。
我想下面的工作,但它並不:
LEFT JOIN entity_contacts_telephones
ON entity_contacts.id = entity_contacts_telephones.contactRef
AND COALESCE(entity_contacts_telephones.isPrimary = 1, 0)
實體在'details'表中可以有多少個?你想展示多少? – 2012-04-12 07:30:57
entity_details是公司,我只想顯示每行一個聯繫人(最好是主要聯繫人)。希望我有道理。 – imperium2335 2012-04-12 07:49:53