有些事情真的让我感到困扰,我不知道什么是“正确”的方法。 如果我选择从我的数据库中获取联系人,那么涉及的体积很大。MySQL 1:N数据映射
它会是这个样子(约60-70列):
SELECT *
FROM contacts
LEFT JOIN company
LEFT JOIN person
LEFT JOIN address
LEFT JOIN person_communication
LEFT JOIN company_communication
LEFT JOIN categories
LEFT JOIN notes
公司和个人是1:1级的基数所以其直线前进。 但“地址”,“通信”和“类别”是1:n基数。
因此,根据1:n表中的行数量,我会得到很多“双”行(我不知道这是什么真正的术语,行不是双我知道地址或电话号码等不同)。对于我自己作为一个联系人,一个相当充满的联系人,我得到了85排。
你们是如何工作的? 在我的PHP应用程序中,我总是写一些“Data-Mapper”,其中数组键是“contact.ID aka primary”,然后检查它是否存在,然后将附加数据推送到其中。另外PHP并不是真正的严格类型,它使得它变得容易。
现在我正在学习GO(golang),并且我认为螺丝LOOOONG选择和数据映射只是为所有1:n写入选择....是的,没有足够的连接来加载充满联系人的表格。我知道我可以增加联系,但错误似乎暗示这将是错误的方式。 我使用以下驱动程序:https://github.com/go-sql-driver/mysql
我也尝试了GROUP_CONCAT,但后来我解决了麻烦的问题。
我必须再次执行我的映射方法吗?还是有一些很好的解决方案吗?我发现它很脏,点寿吗?
我不知道什么是正确的或不正确的,但是您可以尝试1-> many作为foreach中的单独查询,并将结果粘贴到第一个查询的结果中。 – aynber
联接太多。如果你的桌子变得非常大,它会变得非常缓慢。 – vladatr
@vladatr是的,我知道,所以你说我应该通过“多个连接”来解决问题,也就是提高它或者建立一个队列? – Tiega