【发布时间】:2022-08-19 16:54:40
【问题描述】:
我有一个存储用户图片的表格,以及它们应该出现的基于 1 的位置:
CREATE TABLE Picture (
id INT UNSIGNED NOT NULL AUTO_INCREMENT,
user_id INT UNSIGNED NOT NULL,
position INT UNSIGNED NOT NULL,
PRIMARY KEY (id),
INDEX (user_id)
);
它目前充满了破碎的位置,例如:
| id | user_id | position |
|---|---|---|
| 1 | 1 | 1 |
| 2 | 1 | 2 |
| 3 | 1 | 3 |
| 4 | 1 | 5 |
| 5 | 1 | 6 |
| 6 | 1 | 7 |
| 7 | 1 | 7 |
| 8 | 1 | 8 |
| 9 | 2 | 2 |
| 10 | 2 | 3 |
| ... | ... | ... |
如何将基于 1 的位置重新分配给每个用户的图片?同时保持原始position 顺序(模重复)。这样就变成了:
| id | user_id | position |
|---|---|---|
| 1 | 1 | 1 |
| 2 | 1 | 2 |
| 3 | 1 | 3 |
| 4 | 1 | 4 |
| 5 | 1 | 5 |
| 6 | 1 | 6 |
| 7 | 1 | 7 |
| 8 | 1 | 8 |
| 9 | 2 | 1 |
| 10 | 2 | 2 |
| ... | ... | ... |
我只想用 SQL 查询来做到这一点。
可用于演示解决方案的测试数据:
INSERT INTO Picture VALUES
(1, 1, 1),
(2, 1, 2),
(3, 1, 3),
(4, 1, 5),
(5, 1, 6),
(6, 1, 7),
(7, 1, 7),
(8, 1, 8),
(9, 2, 2),
(10, 2, 3),
(11, 2, 4),
(12, 2, 5),
(13, 2, 5),
(14, 2, 5),
(15, 2, 8),
(16, 2, 9),
(17, 2, 10),
(18, 2, 12),
(19, 2, 12);
请不要依赖id 列进行订购:id 的顺序在本例中只是偶然与position 的顺序相同,但实际表中并非如此。