问题
Possible Duplicate:
mysql: Using LIMIT within GROUP BY to get N results per group?
I have a two tables:
- Items
- Categories
Each item belongs to a category. What I want to do is select 5 items per category but say 20 items in total.
SELECT
item_id, item_name, items.catid
FROM
items, categories
WHERE
items.catid = categories.catid
GROUP BY items.catid LIMIT 0,5 //5 per category group
Edit: if there are more than 5 items per category - they should be ordered by the item_id (numeric value)
回答1:
Try this query -
SELECT item_id, item_name, catid FROM
(SELECT t1.*, COUNT(*) cnt FROM items t1
LEFT JOIN items t2
ON t2.catid = t1.catid AND t2.item_id <= t1.item_id
GROUP BY
t1.catid, t1.item_id
) t
WHERE
cnt < 6
-- LIMIT 20
It will show first 5 items per category. Uncomment LIMIT 20
if you need. Join Categories
table if you need.
回答2:
SELECT item_id, item_name, catid
FROM ( SELECT item_id, item_name, catid,
CASE WHEN @catid != catid THEN (@rownum := 1) + !(@catid := catid) ELSE @rownum := $rownum + 1 AS rownum
FROM ( SELECT item_id, item_name, i.catid
FROM items AS i
INNER JOIN categories AS c
ON i.catid = c.catid
ORDER BY i.catid ASC) AS h, (SELECT @catid := NULL, @rownum := NULL) AS var
HAVING rownum <= 5
LIMIT 20) AS h2
ORDER BY item_id
Devart's solution looks right, but I have a bit of a pickle understanding it fully. Mine may not make much more sence to others, but it does to me.
EDIT: Understand Devart's solution now, and it is quite brilliant, actually. :)
来源:https://stackoverflow.com/questions/13359640/mysql-how-to-get-x-number-of-results-per-grouping