mysql - 在MYSQL中如何根据不同的组更新一个升序位置的表?

标签 mysql sql if-statement while-loop

我正在为这个复杂的查询而苦苦挣扎。我正在尝试插入某些产品的订单位置。 例如, 我目前的表 1 的位置为 NULL,我想对每个产品 ID 进行分组,并根据 ProductID 组为每个尺寸分配一个菜单位置,并使用此 FIND_IN_SET:

FIND_IN_SET(size,"UNI,XS,S,M,L,XL,XXL,3XL,4XL,40,41,42,43,44,45,46,47,48,49,50 ,51,52,53,54,55,56,57,58,59,60") asc;

换句话说,我希望它看起来像 Table2。

表1

ID   |   ProductID   |   Size   |   Menu_position
1    |      100      |    S     |   NULL
2    |      100      |    M     |   NULL
3    |      100      |    L     |   NULL
4    |      101      |    40    |   NULL
5    |      101      |    41    |   NULL
6    |      101      |    42    |   NULL
7    |      102      |    XS    |   NULL
8    |      102      |    L     |   NULL

表2

ID   |   ProductID   |   Size   |   Menu_position
1    |      100      |    S     |   1
2    |      100      |    M     |   2
3    |      100      |    L     |   3
4    |      101      |    40    |   1
5    |      101      |    41    |   2
6    |      101      |    42    |   3
7    |      102      |    XS    |   1
8    |      102      |    L     |   2

到目前为止我收集到的内容:

Number of products Group:select count(distinct ProductID) from Table1

根据特定顺序对大小进行排序: SELECT * FROM Table1 ORDER BY FIND_IN_SET(size,"UNI,XS,S,M,L,XL,XXL,3XL,4XL,40 ,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60") 升序;/p>

最佳答案

您可以在 MySQL 8.0 之前的版本中使用变量:

SELECT t1.*,
       (@rn := if(@p = productid, @rn + 1,
                  if(@p := productid, 1, 1)
                 )
       ) as menu_position
FROM (SELECT t1.*
      FROM Table1 t1
      ORDER BY ProductId,
               FIND_IN_SET(size, 'UNI,XS,S,M,L,XL,XXL,3XL,4XL,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60') asc
     ) AS alias CROSS JOIN
     (SELECT @p := -1, @rn := 0) params;

在 MySQL 8+ 中,这要简单得多:

select t1.*,
       row_number() over (partition by productid order by FIND_IN_SET(size, 'UNI,XS,S,M,L,XL,XXL,3XL,4XL,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60')) as menu_position
from table1 t1

关于mysql - 在MYSQL中如何根据不同的组更新一个升序位置的表?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53252030/

相关文章:

sql - 活跃用户 SQL 查询

java - 简单的测验不会等待答案

php - Laravel 查询构建器条件与当前查询使用何时

mysql - phpmyadmin 中的 sql 查询非常慢

mysql - 我应该在 MySQL 表中放置索引

c# - SqlBulkTools - 更新

mysql - 获取给定范围内所有日期的结果,包括不存在的日期

Python区分错误

r - 如果我在 r 中有超过 50 个值,我应该使用什么来代替 ifelse nested?

javascript - 无法更新每个按钮,仅使用 JavaScript 和 AJAX 更新第一个按钮