我想在MySQL中存储联系人,其中一个人可以拥有许多电子邮件和电话号码,我已经创建了下图。
请帮助我获取最佳查询,以获取此人的所有电子邮件和手机联系人。
但是,如果这个架构不好请告诉我一个更好的架构。
我正在使用下面的查询,它给我发电子邮件:
SELECT person.id, first_name, last_name, emails.email
FROM `person_has_emails`
LEFT JOIN person ON person.id = person_has_emails.person_id
LEFT JOIN emails ON person_has_emails.emails_id = emails.id
LIMIT 0 , 30
但是,我想要从单个查询返回的first_name,last_name,email,phone_number。请指教。
答案 0 :(得分:0)
这样做的一种方法是:
SELECT A.first_name, A.last_name, C.email, E.phone FROM person A
LEFT JOIN person_has_emails B on B.person_id = A.id
LEFT JOIN emails C ON B.emails_id = C.id
LEFT JOIN person_has_phone D ON D.person_id = A.id
LEFT JOIN phone E ON D.phone_id = E.id
但这会产生开销。电子邮件将与电话号码配对,因此,如果您有一个有3个电子邮件和2个电话号码的人,那么该人将共有6行。
现在,继续使用架构 - 您应该删除person_has电子邮件和person_has_phone表,并将电子邮件和电话直接链接到人。这是因为一个电子邮件或电话不能属于多个人。或者可以吗?