Mysql表更新相同的company_id

2hh7jdfx  于 2023-05-05  发布在  Mysql
关注(0)|答案(1)|浏览(167)

我有table。我想在表中的image列中分配1到24之间的数字。但是,在执行此操作时,我希望company_id以相同的顺序增加。
例如,如果表中有2条company_id =100的记录,我希望第一条记录的值为1,第二条记录的值为2。
然后,当我切换到company_id=101的记录时,我希望它再次从1开始。
我如何为mysql数据库编写此查询?

wmtdaxz3

wmtdaxz31#

试试这个。我创建了这个表:

CREATE TABLE `test_data2` (
  `id` bigint unsigned NOT NULL AUTO_INCREMENT,
  `company_id` int unsigned NOT NULL,
  `image_path` varchar(50) COLLATE utf8mb4_unicode_ci NOT NULL,
  PRIMARY KEY (`id`)
);

数据:

id  company_id  image_path
------  ----------  ------------
     1         100  img_100_a
     2         100  img_100_b
     3         100  img_100_c
     4         100  img_100_d
     5         101  img_101_a
     6         101  img_101_b

和以下查询:

SELECT id, company_id, image_path,
    (
        CASE company_id 
        WHEN @cur_company_id
        THEN @curRow := @curRow + 1 
        ELSE @curRow := 1 AND @cur_company_id := company_id
        END
    ) AS company_image_counter
FROM test_data2
ORDER BY company_id

给出输出:

id  company_id  image_path  company_image_counter
------  ----------  ----------  -----------------------
     1         100  img_100_a                         1
     2         100  img_100_b                         2
     3         100  img_100_c                         3
     4         100  img_100_d                         4
     5         101  img_101_a                         1
     6         101  img_101_b                         2

因此,对于公司ID 100,对于4个图像,它给出计数器1到4,对于公司101,对于2个图像,它给出计数器1到2。
上面的代码也可以在旧版本的MySQL中运行。如果你有MySQL 8+,它有LAG和LEAD函数。我想看看这些东西是否能帮上忙。
更新:是的,@Akina的查询更好:

SELECT id, company_id, image_path, ROW_NUMBER() OVER (PARTITION BY company_id) AS company_image_counter
FROM test_data2;

    id  company_id  image_path  company_image_counter  
------  ----------  ----------  -----------------------
     1         100  img_100_a                         1
     2         100  img_100_b                         2
     3         100  img_100_c                         3
     4         100  img_100_d                         4
     5         101  img_101_a                         1
     6         101  img_101_b                         2

相关问题