mysql добавление данных с помощью специального автоинкремента - PullRequest
1 голос
/ 29 апреля 2020

У меня есть вопрос о том, как добавить данные в таблицу users_in_queue? Я хочу добавить данные из другой таблицы, но поле number_in_queue должно быть похоже на столбец автоинкремента для каждого queue_id. Я имею в виду, что данные в таблице должны иметь такую ​​структуру:


user_id | queue_id | number_in_queue

1 | 1 | 1

2 | 1 | 2

3 | 2 | 1

4 | 1 | 3

DB architecture

1 Ответ

0 голосов
/ 29 апреля 2020

Старая версия должна использовать некоторые пользовательские переменные, чтобы получить ваш результат.

Вот почему он довольно уродливый

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 |               0
      2 |        1 |               0
      3 |        2 |               0
      4 |        1 |               0
      5 |        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 |               2
      3 |        2 |               1
      4 |        1 |               3
      5 |        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 |               2
      3 |        2 |               1
      4 |        1 |               3
      5 |        2 |               2

дБ <> скрипка здесь

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...