我有一个用户表,然后是一些具有一对多关系的从属表 例如电子邮件表,地址表和组表。 (即一个用户可以拥有多个电子邮件地址,物理地址,并且可以是许多组的成员)
是否更好:
加入所有这些表,并在代码中处理数据堆
使用类似GROUP_CONCAT的内容并返回一行,并将代码中的字段拆开,
或单独查询每个表?
感谢。
答案 0 :(得分:3)
这实际上取决于您在相关表格中拥有的数据量以及您一次查询的用户数量。
选项1在代码处理时往往很麻烦。
除了分组往往很慢(特别是在大型数据集上)这一事实之外,选项2也很容易处理。
选项3最容易处理,但总体上会生成更多查询。如果您的数据集很小并且您不打算扩展到目前的需求以外,那么它可能是最佳选择。如果你只是想显示一条记录,那绝对是最好的选择。
还有第四种选择,但这是我在工作中使用的道路中途,我们处理非常类似的情况。不要一次获取每行1的相关记录,而是使用IN()获取结果集的所有相关记录。然后在代码中循环以将它们与适当的记录相匹配以进行显示。如果您缓存搜索查询,则也可以缓存该第二个查询。它只有两个查询,代码中只有一个循环(没有解析,使用哈希来通过键来关联事物)
答案 1 :(得分:0)
就个人而言,假设我的表索引达到临界值,我将使用表连接并一次性获取所有数据,然后处理它以最终得到嵌套数据结构。这样你就可以发挥每个系统的优势。
答案 2 :(得分:0)
一般来说,针对您所处的情况进行最有效的查询。因此,请不要创建在所有情况下都使用的大型查询。创建特定于案例的查询,仅返回您需要的信息。
在处理结果方面,如果使用GROUP_CONCAT
,则必须在处理过程中拆分所有结果值。如果您的GROUP_CONCAT'd
值中有额外的分隔符,则可能会出现问题。我首选的方法是在输出循环期间将GROUPed BY字段放入$ holder。每次将该字段与$ holder进行比较,并相应地更改输出。