Mail.ruПочтаМой МирОдноклассникиВКонтактеИгрыЗнакомстваНовостиКалендарьОблакоЗаметкиВсе проекты

Нужно из одной sql таблицы сделать две.

Давид Мейстер Мастер (2089), на голосовании 1 год назад
items - текущая таблица
skins - первая таблица которая должна быть на выходе
skins_case - вторая таблица которая должна быть на выходе

В первую таблицу (skins) нужно перенести все строки у которых title и name уникальны, и убрать столбец case.

Во второй (skins_case) чуть сложнее, нужно перенести только параметры case:
Из первого столбца (skins) нужно получить значения id (id = AUTO_INCREMENT) и записать какой id в каком кейсе находится.

Вот пример:

Входные данные (items):
 | id|  img  | title | name  | rarity | cost |   case    | 
+---+-------+-------+-------+--------+------+-----------+
| 1 | img_1 | hello | world | god | 1.00 | best_case |
+---+-------+-------+-------+--------+------+-----------+
| 2 | img_2 | colla | coca | god | 1.00 | best_case |
+---+-------+-------+-------+--------+------+-----------+
| 3 | img_3 | slivci| namnam| god | 1.00 | best_case |
+---+-------+-------+-------+--------+------+-----------+
| 4 | img_4 | slivci| namnam| god | 1.00 | god_case |
+---+-------+-------+-------+--------+------+-----------+
| 5 | img_5 | hello | world | god | 1.00 | god_case |
+---+-------+-------+-------+--------+------+-----------+
| 6 | img_6 | blabla| lalala| god | 1.00 | god_case |
+---+-------+-------+-------+--------+------+-----------+
| 7 | img_7 | hello | world | god | 1.00 | top_case |
+---+-------+-------+-------+--------+------+-----------+
| 8 | img_8 | i_item| world | god | 1.00 | top_case |
+---+-------+-------+-------+--------+------+-----------+
| 9 | img_9 | hello | lalala| god | 1.00 | top_case |
+---+-------+-------+-------+--------+------+-----------+
| 10| img_10| hello | world | god | 1.00 | top_case |
Выходные данные (skins, skins_case):
skins —
 | id|  img  | title | name  | rarity | cost | 
+---+-------+-------+-------+--------+------+
| 1 | img_1 | hello | world | god | 1.00 |
+---+-------+-------+-------+--------+------+
| 2 | img_2 | colla | coca | god | 1.00 |
+---+-------+-------+-------+--------+------+
| 3 | img_3 | slivci| namnam| god | 1.00 |
+---+-------+-------+-------+--------+------+
| 4 | img_6 | blabla| lalala| god | 1.00 |
+---+-------+-------+-------+--------+------+
| 5 | img_8 | i_item| world | god | 1.00 |
+---+-------+-------+-------+--------+------+
| 6 | img_9 | hello | lalala| god | 1.00 |

skins_case —
 | id|   case    |  
+---+-----------+
| 1 | best_case |
+---+-----------+
| 2 | best_case |
+---+-----------+
| 3 | best_case |
+---+-----------+
| 3 | god_case |
+---+-----------+
| 1 | god_case |
+---+-----------+
| 4 | god_case |
+---+-----------+
| 1 | top_case |
+---+-----------+
| 5 | top_case |
+---+-----------+
| 6 | top_case |
+---+-----------+
| 1 | top_case |
Голосование за лучший ответ
Лайт Ягами Искусственный Интеллект (309767) 1 год назад
А в чём заключается проблема, например, построчно скриптом выбрать каждую запись, проверить, есть ли она в новой таблице, если есть - получить её id, если нет - вставить и получить last insert id, затем во вторую новую таблицу вставить case с нужным id, полученным на предыдущем шаге? Да, это будет за O(n * log n), если у тебя индексы в БД есть на поля (title, name), или O(n * n) в худшем случае, но не думаю, что у тебя там много данных в таблицах.
Хотя навскидку подозреваю, что это можно и двумя SQL-запросами сделать, но лень придумывать решение
Άηϑρέΰ ҂Искусственный Интеллект (179999) 1 год назад
проблема в том, что нужно ведь это писать, проверять.. а так найдется чувачок и все напишет
Похожие вопросы