MYSQL在表之间选择三个关系之后的值

时间:2011-10-09 04:33:25

标签: php mysql sql

我为我正在处理的应用程序创建了一个连接。

SELECT community.id, 
       community.name, 
       property.type, 
       property.lowest_price, 
       property.highest_price,
       property.commission_rate,
       property.fixed_bonus 
  FROM community, 
       property 
 WHERE community.zip IN ($zips) 
   AND property.community_id = community.id

我希望选择一个需要遵循三个关系的附加值,并且不确定最佳方法。

我想要的价值是builder_group.name

社区表格community.user_id与构建器表builder.user_id

相关联

构建器表格还有builder.builder_group_id,与builder_group表的builder_group.id

相关联

builder_group表最终具有我想要选择的值builder_group.name

此外,为分页目的返回计数的最佳方法是什么。最好是在最初没有返回列并在PHP级别传递它,或者可以使用SELECT返回而没有显着的开销吗?

2 个答案:

答案 0 :(得分:2)

如果切换到明确的JOIN条件,事情会变得更加清晰:

SELECT community.id, community.name,
       property.type, property.lowest_price, property.highest_price, property.commission_rate, property.fixed_bonus,
       builder_group.name
FROM community
JOIN property      on property.community_id = community.id
JOIN builder       on builder.user_id = community.user_id
JOIN builder_group on builder_group.id = builder.builder_group_id
WHERE community.zip IN ($zips)

如果您担心所有这些JOIN都很慢,那么请查看连接条件中涉及的列的索引(使用显式JOIN的另一个原因)并对查询进行概要分析。

就您的分页问题而言,您可能希望了解FOUND_ROWS()函数。

答案 1 :(得分:0)

SELECT community.id, 
   community.name, 
   property.type, 
   property.lowest_price, 
   property.highest_price,
   property.commission_rate,
   property.fixed_bonus,builder_group.name
   FROM community 
   JOIN property ON property.community_id = community.id
   JOIN builder ON builder.user_id = community.user_id
   JOIN builder_group.id ON builder_group.id =  builder.builder_group_id 
   WHERE community.zip IN ($zips)