我有三张桌子:
属于许多业务的一个类别 和一个企业可以有多个类别
现在我正在尝试这样做,我希望得到以下结果:
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 :(得分: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;