You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何从5个指定分类ID中各查询N条数据?SQL语句求助

解决方案:按指定分类分别获取N条关联文章数据

为啥你的SQL不行?

  • 第一条用GROUP BY p.fk_category_id,相当于把每个分类下的所有结果合并成一条返回,自然拿不到N条数据。
  • 第二条的LIMIT 5是全局只返回5条,不是每个分类分配5条,而且排序按产品ID,根本没按分类控制数量。

推荐写法(支持MySQL8.0+/PostgreSQL/SQL Server等)

用ROW_NUMBER()窗口函数,给每个分类下的文章按顺序编号,然后筛选编号≤N的记录即可,假设N=5:

SELECT 
    category_id,
    fk_produit_id,
    id,
    titre,
    prix,
    description,
    short_description,
    image_url
FROM (
    SELECT 
        p.fk_category_id AS category_id,
        a.fk_produit_id,
        a.id,
        a.titre,
        a.prix,
        a.description,
        a.short_description,
        a.image_url,
        -- 按分类分组,给每组内的文章编号
        ROW_NUMBER() OVER (PARTITION BY p.fk_category_id ORDER BY a.id DESC) AS row_num
    FROM articles a
    INNER JOIN produits p ON p.id = a.fk_produit_id
    WHERE p.fk_category_id IN (2, 248, 335, 493, 1038)
) AS ranked_data
WHERE row_num <= 5; -- 把5换成你需要的N值

注:ORDER BY a.id DESC可以改成你需要的排序规则,比如按价格、发布时间排序都可以

旧版MySQL兼容写法(无窗口函数)

如果你的MySQL版本低于8.0,用用户变量来实现分组计数:

SELECT 
    category_id,
    fk_produit_id,
    id,
    titre,
    prix,
    description,
    short_description,
    image_url
FROM (
    SELECT 
        p.fk_category_id AS category_id,
        a.fk_produit_id,
        a.id,
        a.titre,
        a.prix,
        a.description,
        a.short_description,
        a.image_url,
        -- 同一个分类就计数+1,换分类就重置为1
        @row_num := IF(@current_cat = p.fk_category_id, @row_num + 1, 1) AS row_num,
        @current_cat := p.fk_category_id
    FROM articles a
    INNER JOIN produits p ON p.id = a.fk_produit_id
    -- 初始化变量
    CROSS JOIN (SELECT @current_cat := 0, @row_num := 0) AS vars
    WHERE p.fk_category_id IN (2, 248, 335, 493, 1038)
    -- 必须先按分类排序,否则计数会乱
    ORDER BY p.fk_category_id, a.id DESC
) AS ranked_data
WHERE row_num <= 5; -- 替换为你的N值

效果说明

不管用哪种写法,最终都会返回你指定的5个分类中,每个分类下最多N条关联的文章记录,完全匹配你要的结果格式。

内容的提问来源于stack exchange,提问作者Nicolas

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.11 18:31:07