2011-04-18 133 views
0

我想限制的最後一個左連接到只有1結果MySQL的左連接限制

$query="SELECT a.*, cc.name AS category, ee.ezcity AS proploc 
     , dd.name AS statename, bb.name AS countryname 
     , u.logo_image AS logo_image, u.mid AS mid 
     , u.dealer_name AS dealer_name, u.dealer_company AS dealer_company 
     , u.dealer_phone AS dealer_phone, u.dealer_mobile AS dealer_mobile 
     , u.published AS dealerpublished, sp.tenant AS tenant 
     , sp.spacenum AS spacenum, sp.sf AS sf, sp.image AS tenantimage 
     , u.dealer_type AS dealer_type 
    FROM #__ezrealty as a" 
    . "\n LEFT JOIN #__ezrealty_catg AS cc ON cc.id = a.cid" 
    . "\n LEFT JOIN #__ezrealty_locality AS ee ON ee.id = a.locid" 
    . "\n LEFT JOIN #__ezrealty_state AS dd ON dd.id = a.stid" 
    . "\n LEFT JOIN #__ezrealty_country AS bb ON bb.id = a.cnid" 
    . "\n LEFT JOIN #__ezrealty_profile AS u ON u.mid = a.owner" 
    . "\n LEFT JOIN #__ezrealty_siteplan AS sp ON sp.listing_id = a.id " 
    . "\n WHERE $extrastring AND a.published = '1' $vacant 
      AND cc.access <= $my->gid $wheres " 
    . $order.' LIMIT '.$pageNav->limitstart.', '.$pageNav->limit; 

我曾嘗試:

. "\n LEFT JOIN (SELECT listing_id FROM #__ezrealty_siteplan LIMIT 1) sp 
     ON sp.listing_id = a.id" 
+0

它看起來像你從ezrealty_siteplan隨機選擇'listing_id'?你怎麼知道這會匹配'a.id'?如果你不把'(SELECT listing_id FROM #__ezrealty_siteplan LIMIT 1)'改爲'(SELECT listing_id FROM #__ezrealty_siteplan WHERE listing_id = .... LIMIT 1)' – Johan 2011-04-18 22:39:12

+0

對於你想要做的事情非常困惑。如果你將'LEFT JOIN'改爲'INNER JOIN',這有幫助嗎? – Johan 2011-04-18 22:40:43

+0

我用它解決了這個問題: LEFT JOIN(SELECT * FROM #__ezrealty_siteplan GROUP BY listing_id)AS sp ON sp.listing_id = a.id 問題是每個房地產上市是一個上市本身(整個購物中心)和列表需要包含購物中心中租賃和可用空間的子列表。當用戶搜索時,如果購物中心有5個可用空間,它將顯示相同的購物中心5倍。 – MSD 2011-04-19 14:42:16

回答

0

我覺得你的結果看起來像它含有超過1,因爲結果不是GROUP BY的任何列。

+1

GROUP BY與聚合使用。巧合的是,它會消除重複,但這遠遠不是它的設計目的。如果一個查詢需要一個GROUP BY來消除重複,通常意味着查詢是錯誤設計的。 SELECT子句上的DISTINCT限定符比僅包含SELECT子句中的一部分列名的GROUP BY子句更簡單且更具可移植性,該子句允許MySQL允許,但其他DBMS不允許。 – 2011-04-18 21:14:33

+0

不是任何mysql專家,但我無法找到很多幫助,我可以將它拼湊在一起,它似乎工作: 左加入(SELECT * FROM #__ezrealty_siteplan GROUP BY listing_id)AS SP ON sp.listing_id = a.id 我會選擇你的答案,因爲它指向我粗暴地完成我所需要的工作(如果我理解正確,應該有更好的方法來做到這一點) – MSD 2011-04-19 14:48:57