如何为每组数据生成增量数?

m1m5dgzv  于 2021-06-21  发布在  Mysql
关注(0)|答案(1)|浏览(270)

这个问题在这里已经有了答案

在mysql中对结果进行排名(mysql等价于oracle中的'dense\u rank()'或'row\u number()'函数)(1个答案)
两年前关门了。
这是我的表格数据

  1. prod_id category_id
  2. 1 1
  3. 2 2
  4. 3 2
  5. 4 3
  6. 5 3
  7. 6 3

预期结果

  1. prod_id category_id seq_no
  2. 1 1 1
  3. 2 2 1
  4. 3 2 2
  5. 4 3 1
  6. 5 3 2
  7. 6 3 3

这只是根据类别生成序列号的示例之一,也可能是其他条件。
我试图根据id\u category字段为我获得的每组数据生成序列号。我尝试了dense\u rank()方法,但mysql不支持它。
如何以这种方式为每组生成序列号?

  1. DENSE_RANK() OVER (ORDER BY id_category) As seq_no

我的问题

  1. Product::leftJoin('category','category.id_category','=','product.id_category')
  2. ........
  3. ->get();
f3temu5u

f3temu5u1#

如果你没有大量的数据,可能最容易
抓住一切
按类别分组
按产品分类
循环遍历每个类别,并根据当前索引设置序列号
虽然我不知道您的表的确切性质,但它看起来是这样的,以您的查询为开始:

  1. Product::leftJoin('category','category.id_category','=','product.id_category')
  2. ->get()
  3. ->groupBy('category_id')
  4. ->each(function ($group) {
  5. $group->sortBy('product_id')
  6. ->map(function ($product, $index) {
  7. $product->seq_no = $index + 1;
  8. });
  9. });

但请注意,这应该被视为伪代码,并根据最适合您的应用程序进行调整。

展开查看全部

相关问题