表track_play_counts
中有一列名为play_count
的列,该列是各个track_play_count
的总和。如何将play_count
列拆分为仅将play_count
值设为1的不同行?该表包含数千个数据,因此我无法手动执行。
例如,如果play_count
为10,则应该有10行带有1 play_count
。如何使用mysql或laravel实现它?
答案 0 :(得分:1)
您可以使用此查询创建一个新表,其中每个单独的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
注释
play_count
的最大值为99,如果大于该最大值,则需要通过numbers
再加上一位数字来增加JOIN
表的大小对此。 (id INT AUTO_INCREMENT PRIMARY KEY)
并更改{{1} }到SELECT