1

我正在使用 PHP 和 MySQL 开发一个 Web 应用程序。我有一个名为 User 的实体,其中有许多一对多的关系(与其他对象)(地址列表、电子邮件列表、电话号码列表等)。这些地址、电子邮件、电话号码通过数据库中的连接表(user_link_addresses、user_link_emails 等)提供给用户。

我现在正在尝试为用户实体创建一个高效的 DAO,特别是方法 readUserById($userId) 和 readAllUsers()。但是,由于我是 sql 和 DAO 模式的业余爱好者,因此无法正确创建此 DAO。

有人告诉我,将您的 DAO 保留在一个查询中,该查询一次读取所有信息,然后可以相应地映射到该实体,这对于网络效率很重要。这确实有道理,但我无法生成一个查询,该查询包含所有内容的必要信息并且可以正确映射到我的实体。

现在,我可以通过在获取用户后在一个循环中执行多个查询来获取此信息......我只是不喜欢这个想法(而且我确信它不正确)。此外,我知道如何使用联结表进行连接 - 只是不使用如此复杂且需要正确映射的东西。

表名和字段

表:用户字段:用户 ID、用户名、密码

表:地址字段:address_id、街道、城市、州、邮政编码、类型

表:电子邮件字段:email_id、电子邮件、类型

表:phone_number 字段:phone_number_id、area_code、phone_number、类型

-- 协会连接表 --

表:user_link_address 字段:user_id、address_id

表:user_link_email 字段:user_id、email_id

表:user_link_phone_number 字段:user_id、phone_number_id

无论如何,非常感谢所有帮助,

史蒂夫

4

1 回答 1

0

有时在查询中包含关联是值得的,有时则不然。Ruby on Rails 有一个非常简洁的插件,可以在应用程序运行时分析它并告诉您哪些查询应该包含相关模型。

您可以尝试以下方法:

SELECT *
    FROM `user` 
    INNER JOIN `user_link_addresses`
        ON `user`.id = `user_link_addresses`.user_id
    INNER JOIN `user_link_foo`
        ON `user`.id = `user_link_foo`.user_id

如果你告诉我你所有的表名和字段,我可以帮你写一个更具体的查询。

于 2010-01-24T18:21:57.187 回答