Привет, у меня есть следующие данные mysql
INSERT INTO 'monthly' ('id', 'year', 'stat_id', 'cat_id', 'January', 'February', 'March', 'April', 'May', 'June', 'July', 'August', 'September', 'October', 'November', 'December') VALUES
(1, '2017', '12', '25', '1', '3', '1', '1', '3', '4', '4', '2', '4', '', '', ''),
и я хотел бы, чтобы это было так, чтобы быть таким
INSERT INTO 'monthlydata' ('id', 'year', 'monthName', 'stat_id', 'cat_id', 'data') VALUES
(1, '2017', 'January', '12', '25', '1'),
(2, '2017', 'February', '12', '25', '3'),
(3, '2017', 'March', '12', '25', '1'),
(4, '2017', 'April', '12', '25', '1'),
(5, '2017', 'May', '12', '25', '3'),
(6, '2017', 'June', '12', '25', '4'),
(7, '2017', 'July', '12', '25', '4'),
(8, '2017', 'August', '12', '25', '2'),
(9, '2017', 'September', '12', '25', '4'),
(10, '2017', 'October', '12', '25', ''),
(11, '2017', 'November', '12', '25', ''),
(12, '2017', 'December', '12', '25', ''),
есть ли более простой способ сделать это, используя mysql/php
Вам нужно UNPIVOT
ваши данные. MySQL не имеет встроенной функции для этого, поэтому вам нужно будет использовать несколько запросов.
INSERT INTO 'monthlydata' ('id', 'year', 'monthName', 'stat_id', 'cat_id', 'data') VALUES
SELECT id, year, 'January', stat_id, cat_id, January
FROM monthly WHERE monthName = 'January'
UNION ALL
SELECT id, year, 'February', stat_id, cat_id, February
FROM monthly WHERE monthName = 'February'
UNION ALL
SELECT id, year, 'March', stat_id, cat_id, March
FROM monthly WHERE monthName = 'March'
.....
ID
может вызвать проблемы. В зависимости от того, как вы его определили. Если он сгенерирован автоматически, вы можете удалить его из INSERT и дать ему автогенерировать. Поскольку у вас будут строки на все месяцы с одинаковым ID
, вам необходимо обработать этот сценарий.
INSERT INTO
используя PHP или существующие данные MySQL?