Mysql限制与Group by

时间:2014-11-02 09:04:17

标签: php mysql

我有三张桌子:

  1. 类别
  2. 楼内设有商务
  3. business_category(包含field,id,category_id,buisness_id)
  4. 属于许多业务的一个类别 和一个企业可以有多个类别

    现在我正在尝试这样做,我希望得到以下结果:

    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个结果。

    有人可以给我一些想法吗?

    由于

2 个答案:

答案 0 :(得分:1)

你做不到。限制仅用于获取查询的3行,您想要的是获得所有结果,但每个类别只有3个元素。

解决方案可以是,首先获取所有类别,然后为每个类别创建一个限制为3的查询。 另一个解决方案可能是获取所有结果,然后删除那些您不想要的结果。

第一种解决方案较慢,但第二种解决方案需要更多内存。

答案 1 :(得分: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;