我有一个关于如何在表users_in_queue中添加数据的问题?我想从另一个表添加数据,但是字段number_in_queue
必须像每个queue_id
的自动增量列一样。我的意思是表中的数据必须具有这种结构:
较旧的版本必须使用一些用户变量才能得出结果。
这就是为什么它很丑陋的原因
CREATE Table user_in_queues(user_id INTEGER, queue_id INTEGER , number_in_queue INTEGER)
✓
INSERT INTO user_in_queues VALUES (1,1,0),(2,1,0),(3,2,0),(4,1,0),(5,2,0);
✓
SELECT * FROM user_in_queues;
user_id | queue_id | number_in_queue------:| -------:| --------------:1 | 1 | 02 | 1 | 03 | 2 | 04 | 1 | 05 | 2 | 0
SELECT user_id, queue_id, number_in_queue FROM (SELECT user_id, IF(@queue = queue_id, @rn:=@rn + 1, @rn:=1) number_in_queue, @queue:=queue_id queue_id FROM (SELECT * FROM user_in_queues ORDER BY queue_id , user_id) t1, (SELECT @queue:=0) t2, (SELECT @rn:=0) t3) t4 ORDER BY user_id;
user_id | queue_id | number_in_queue------:| -------:| --------------:1 | 1 | 1个2 | 1 | 23 | 2 | 1个4 | 1 | 35 | 2 | 2
UPDATE user_in_queues u SET number_in_queue = (SELECT number_in_queue FROM (SELECT user_id, IF(@queue = queue_id, @rn:=@rn + 1, @rn:=1) number_in_queue, @queue:=queue_id queue_id FROM (SELECT * FROM user_in_queues ORDER BY queue_id , user_id) t1, (SELECT @queue:=0) t2, (SELECT @rn:=0) t3) t4 WHERE user_id = u.user_id AND queue_id = u.queue_id )
✓
SELECT * FROM user_in_queues;
user_id | queue_id | number_in_queue------:| -------:| --------------:1 | 1 | 1个2 | 1 | 23 | 2 | 1个4 | 1 | 35 | 2 | 2
db <>小提琴here