我知道在SQL语句结尾处有一个LIMIT,如下所示:
SELECT * FROM books WHERE 1 LIMIT 3
它最多会显示表books
中的3个项目。
现在假设我们有一个字段category
并按其过滤:
SELECT * FROM books WHERE category IN (1, 3, 5) LIMIT 3
我将获得具有值为1或3或5的类别的行,并且再次将行数限制为3。
如何为每个类别限制3? (基本思想概要)
SELECT * FROM books WHERE category IN (1, 3, 5) LIMITS (3, 3, 3)
答案 0 :(得分:3)
您可以使用UNION
:
(SELECT * FROM books WHERE category = 1 LIMIT 3)
UNION
(SELECT * FROM books WHERE category = 3 LIMIT 3)
UNION
(SELECT * FROM books WHERE category = 5 LIMIT 3)
答案 1 :(得分:0)
与MySQL user defined variables
一起,你可以做到这一点:
SELECT
t.*
FROM
(
SELECT
*,
IF( @sameCategory = category , @rn := @rn + 1,
IF(@sameCategory := category, @rn := 1, @rn := 1)
) AS rowNumber
FROM books
CROSS JOIN (SELECT @sameCategory := 0, @rn := 1) var
ORDER BY category
) AS t
WHERE t.rowNumber <= 3
ORDER BY t.category
答案 2 :(得分:0)
您不会在单个查询中使用LIMIT
。一种方法使用变量:
select b.*
from (select b.*,
(@rn := if(@c = category, @rn + 1,
if(@c := category, 1, 1)
)
) as rn
from books b cross join
(select @c := -1, @rn := 0) params
where category in (1, 2, 3)
order by category
) b
where rn <= 3;