2011-10-09 75 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)