Mysql 如何根据列选择有限的行

Mysql 如何根据列选择有限的行,mysql,sql,Mysql,Sql,我是MySQL的新手。这可能很容易,但不符合我的逻辑 我有一个product_表,它有5列 id product_name product_image description category_id 在该表中,category_id具有多个具有相同id的行 比如说 类别字段有300行类别id为“4”和100行类别id为“3”,依此类推 我只想为每个类别id选择5行 例如 5行用于类别\u id 4,5行用于类别\u id 3,如下所示 SELECT * FROM product_table W

我是MySQL的新手。这可能很容易,但不符合我的逻辑

我有一个product_表,它有5列

id
product_name
product_image
description
category_id
在该表中,category_id具有多个具有相同id的行

比如说

类别字段有300行类别id为“4”和100行类别id为“3”,依此类推

我只想为每个类别id选择5行 例如 5行用于类别\u id 4,5行用于类别\u id 3,如下所示

SELECT * FROM product_table WHERE category_id = '1' LIMIT 5
UNION
SELECT * FROM product_table WHERE category_id = '2' LIMIT 5
UNION
SELECT * FROM product_table WHERE category_id = '3' LIMIT 5
.
.
.
如果只有几个类别,那么这应该是好的

select * 
from 
    (SELECT category_id,
        id,
        CASE WHEN @gr=category_id THEN @rn:=@rn+1 ELSE @rn:=0 END as row_number,
        @gr:=category_id
     FROM the_table, (select @rn:=0, @gr:=null) as sess
     order by category_id, id) sub
WHERE sub.row_number<5

您可以引入会话变量,并对每个组中的数据计数成员进行排序。然后只留下组号小于5的成员

请不要使用所有大写字母,这在互联网上相当于叫喊,这是非常粗鲁的。我已经把它编辑掉了,但请记住这一点。@mark谢谢您的编辑。如果你需要突出显示内容,最好使用斜体或粗体,但同样,过度使用实际上会损害可读性。