2014-11-02 66 views
0

我有三個表:Mysql的限制與集團通過

  1. 類別
  2. 樓內設有商務
  3. business_category(有現場,ID,CATEGORY_ID,buisness_id)

第一類屬於許多業務
和一個業務可以有多個類別

現在我試圖做到這一點,我希望得到以下結果:

Category 1 

buisenn 1 
buisness 2 
buisnesss 3 


Category 2 

business 1 for cat2 
business 2 for cat 2 
business 3 for cat 2 

我只想顯示三大業務爲每個類別。

這是我試過的查詢:

SELECT `category`.`name` AS `category_name`, 
     `category`.`id` AS category_id, 
     `business`.`avg_service_price` AS avg_price, 
     `business`.`name` AS `business_name`, 
     `business`.`address`, 
     `business`.`address2`, 
     `business`.`city`, 
     `business`.`state`, 
     `business`.`zipcode`, 
     `business`.`id` AS `business_id`, 
     `business`.`lat`,`business`.`lon` 
    FROM `business_category` 
    LEFT JOIN `business` 
     ON `business_category`.`business_id` = `business`.`id` 
    LEFT JOIN `category` 
     ON `business_category`.`category_id` = `category`.`id` 
    GROUP BY `business`.`id` 
    LIMIT 0,3 

它僅顯示3個結果。

有人可以給我想法嗎?

謝謝

+0

刪除限制0,3? – geoandri 2014-11-02 09:35:50

+0

它會顯示所有結果。我需要每個類別3個業務表格 – 2014-11-02 09:41:22

+0

它對我而言並不是什麼預期的輸出。我建議你添加它。但是使用LIMIT 0,3會得到您的查詢的前三個結果,所以即使其餘的查詢是正確的,您也不會爲每個類別獲得三項業務 – geoandri 2014-11-02 09:46:00

回答

1

你不能那樣做。限制僅用於獲取查詢的3行,而您想要的是獲取所有結果,而不是每個類別只有3個元素。

解決方案可能是先獲取所有類別,然後爲每個類別創建一個查詢,限制爲3. 另一種解決方案可能是獲取所有結果,然後刪除那些不需要的結果。

第一個解決方案比較慢,但第二個解決方案需要更多內存。

1

您需要相當於「groupwise max」。請參閱my blog,其中包含此示例:

SELECT 
    province, n, city, population 
FROM 
    (SELECT @prev := '', @n := 0) init 
JOIN 
    (SELECT @n := if(province != @prev, 1, @n + 1) AS n, 
      @prev := province, 
      province, city, population 
     FROM Canada 
     ORDER BY 
      province ASC, 
      population DESC 
) x 
WHERE n <= 3 
ORDER BY province, n;