2011-10-09 39 views
0

三个关系我创建了一个用于连接我工作的一个应用程序的值。MYSQL选择下列跨表

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

如果切换到明确的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()功能。

+0

谢谢。这使得更多的意义!尽管问题很快。这样做,这是否意味着MYSQL必须构建整个表,然后限制由zip返回的结果? – christian

+0

@christian:这完全取决于查询优化器,但使用显式连接条件告诉优化你的目的到底是什么,因此可以更好的优化。 –

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)