Разбить одну строку на несколько строк в соответствии со столбцом суммы - PullRequest
0 голосов
/ 01 января 2019

схема

В таблице track_play_counts есть столбец с именем play_count, представляющий собой сумму отдельных track_play_count.Как разбить столбец play_count на разные строки, которые будут иметь значение play_count только как 1?Таблица содержит тысячи данных, поэтому я не могу сделать это вручную.

Например, если play_count равно 10, тогда должно быть 10 строк с 1 play_count.Как я могу добиться этого с помощью MySQL или Laravel?

1 Ответ

0 голосов
/ 01 января 2019

Вы можете использовать этот запрос для создания новой таблицы, которая имеет одну строку для каждого отдельного человека track_play_count.

CREATE TABLE new_play_counts (id INT AUTO_INCREMENT PRIMARY KEY) AS
SELECT track_id, 1 AS play_count
FROM (SELECT n10.n*10 + n.n AS num
      FROM (SELECT 0 AS n UNION SELECT 1 UNION SELECT 2 UNION SELECT 3
                          UNION SELECT 4 UNION SELECT 5 UNION SELECT 6
                          UNION SELECT 7 UNION SELECT 8 UNION SELECT 9) n10
      JOIN (SELECT 0 AS n UNION SELECT 1 UNION SELECT 2 UNION SELECT 3
                          UNION SELECT 4 UNION SELECT 5 UNION SELECT 6
                          UNION SELECT 7 UNION SELECT 8 UNION SELECT 9) n
      ) numbers
JOIN track_play_counts p ON p.play_count > numbers.num
ORDER BY p.Id, numbers.num

Демонстрация на dbfiddle

Примечания

  1. Я предположил, что максимальное значение play_count равно 99, если оно больше, чем вам, вам нужно будет увеличить размер таблицы numbers, добавив к ней JOIN еще одну цифру.
  2. Я также предположил, что вы захотите присвоить каждой строке в новой таблице отдельное значение идентификатора, в противном случае вы удалите (id INT AUTO_INCREMENT PRIMARY KEY) из первой строки запроса и измените SELECTдо SELECT id, track_id, 1 AS play_count
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...