ANTICHAT.XYZ    VIDEO.ANTICHAT.XYZ    НОВЫЕ СООБЩЕНИЯ    ФОРУМ  
Баннер 1   Баннер 2
Antichat снова доступен.
Форум Antichat (Античат) возвращается и снова открыт для пользователей. Здесь обсуждаются безопасность, программирование, технологии и многое другое. Сообщество снова собирается вместе.
Новый адрес: forum.antichat.xyz
Вернуться   Форум АНТИЧАТ > Программирование > PHP, PERL, MySQL, JavaScript
   
Ответ
 
Опции темы Поиск в этой теме Опции просмотра

Проблема с конвертацией базы mySQL
  #1  
Старый 16.10.2009, 09:37
Аватар для GrAmOzEkA
GrAmOzEkA
Участник форума
Регистрация: 25.06.2006
Сообщений: 220
Провел на форуме:
2052669

Репутация: 178
По умолчанию Проблема с конвертацией базы mySQL

Народ помогите решить одну проблему. Есть база mySQL с серийниками к программам около 120 000. Структура базы такая:
Код:
 __ ____ ______ _______ 
|  |    |      |       |
|ID|soft|serial|comment|
|__|____|______|_______|
В столбце soft находится информация о названии программы. В serial логины,серийники,ключи и т.д.
Прблема состоит в том что я хочу разделить информацию о имени пользователя и серийнике:
Код:
 __ ____ ______ _______ _______
|  |    |      |       |       |
|ID|soft| name |serial |comment|
|__|____|______|_______|_______|
Столбец name имя пользователя, serial серийник.

Например было:
Код:
INSERT INTO `base_serials` VALUES (0,'AfterCam 2.4', 'Name: LAXiTY s/n: slajwfcdmxypwdwzahwhw', 'NULL', 'NULL');
INSERT INTO `base_serials` VALUES (0,'Address Everywhere 2.81', 'Name: archigamedis Password: DiSTiNCT s/n: 2104005254', 'NULL', 'NULL');
INSERT INTO `base_serials` VALUES (0,'AcqURL 5.3', 's/n: 893668581437812682205368 ', 'NULL', 'NULL');
INSERT INTO `base_serials` VALUES (0,'All-Purpose Legal Documents 1.01', 'Name: TEAM EViDENCE Company: TEAM EViDENCE s/n: 697-3033-061', 'NULL', 'NULL');
INSERT INTO `base_serials` VALUES (0,'Advanced Popup Killer 2002 2.1', 'Name: iNTENSiON s/n: 214547403613104583621042757fA2 or Name: shadow_DWRF s/n: 214547403613104583621042757fA2', 'NULL', 'NULL');
А надо:
Код:
INSERT INTO `base_serials` VALUES (0,'AfterCam 2.4', 'Name: LAXiTY', 's/n: slajwfcdmxypwdwzahwhw', 'NULL');
INSERT INTO `base_serials` VALUES (0,'Address Everywhere 2.81', 'Name: archigamedis', 'Password: DiSTiNCT s/n: 2104005254', 'NULL');
INSERT INTO `base_serials` VALUES (0,'AcqURL 5.3', 'NULL', 's/n: 893668581437812682205368', 'NULL');
INSERT INTO `base_serials` VALUES (0,'All-Purpose Legal Documents 1.01', 'Name: TEAM EViDENCE Company: TEAM EViDENCE', 's/n: 697-3033-061', 'NULL');
INSERT INTO `base_serials` VALUES (0,'Advanced Popup Killer 2002 2.1', 'Name: iNTENSiON', 's/n: 214547403613104583621042757fA2', 'NULL');
INSERT INTO `base_serials` VALUES (0,'Advanced Popup Killer 2002 2.1', 'Name: shadow_DWRF', 's/n: 214547403613104583621042757fA2', 'NULL');
Примерно так, иногда там где s/n: стоит key: или password: и т.д.
 
Ответить с цитированием

  #2  
Старый 16.10.2009, 10:12
Аватар для Gray_Wolf
Gray_Wolf
Постоянный
Регистрация: 07.03.2009
Сообщений: 357
Провел на форуме:
1284900

Репутация: 399
По умолчанию

Ну можно сделать бекап базы а потом просто сделать замену:
s/n: на ' , 's/n:
key: на ' , 'key:
Ну или распарсить всю базу регулярками для надёжности...
 
Ответить с цитированием

  #3  
Старый 16.10.2009, 10:12
Аватар для Byte_
Byte_
Участник форума
Регистрация: 07.09.2008
Сообщений: 139
Провел на форуме:
351188

Репутация: 65
По умолчанию

если я всё правильно понял, то нужно написать php скрипт с регуляркой, которая будет отделять NAME: ------ и до пробела в старой таблице и писать в новую.
т.к. записей очень много - стоит воспользоваться LIMIT. что-бы в ручную не перезапускать скрипт - можно по завершению очередного цикла обработки отображать браузеру яваскрипт, который передаст в url следующее значение limit
 
Ответить с цитированием

  #4  
Старый 16.10.2009, 10:13
Аватар для Gray_Wolf
Gray_Wolf
Постоянный
Регистрация: 07.03.2009
Сообщений: 357
Провел на форуме:
1284900

Репутация: 399
По умолчанию

Цитата:
120 000
Много? о_О
 
Ответить с цитированием

  #5  
Старый 16.10.2009, 10:15
Аватар для Byte_
Byte_
Участник форума
Регистрация: 07.09.2008
Сообщений: 139
Провел на форуме:
351188

Репутация: 65
По умолчанию

всё очень сильно зависит от сервера - где всё это лежит.
 
Ответить с цитированием

  #6  
Старый 16.10.2009, 10:19
Аватар для Gray_Wolf
Gray_Wolf
Постоянный
Регистрация: 07.03.2009
Сообщений: 357
Провел на форуме:
1284900

Репутация: 399
По умолчанию

Цитата:
Сообщение от Byte_  
всё очень сильно зависит от сервера - где всё это лежит.
В любом случае подобные операции на "живой" БД делать нельзя, так что так и так придётся это делать на другой машине.
 
Ответить с цитированием

  #7  
Старый 16.10.2009, 10:23
Аватар для Byte_
Byte_
Участник форума
Регистрация: 07.09.2008
Сообщений: 139
Провел на форуме:
351188

Репутация: 65
По умолчанию

согласен.
Вот регулярку накидал
Name: .*(?=s\/n)
проверял на яваскрипте. работает, но нужно предварительно пробели пропарсить (что-бы 2 пробела в некоторых местах на один заменить)
 
Ответить с цитированием

  #8  
Старый 16.10.2009, 10:38
Аватар для GrAmOzEkA
GrAmOzEkA
Участник форума
Регистрация: 25.06.2006
Сообщений: 220
Провел на форуме:
2052669

Репутация: 178
По умолчанию

Забыл сказать, иногда бывает что имени пользователя нет, а серийник есть, его надо перебросить из name в serial и занулить name, так же иногда встречаются конструкции:
Цитата:
Name: iNTENSiON s/n: 214547403613104583621042757fA2 or Name: shadow_DWRF s/n: 214547403613104583621042757fA2
Их надо разбить на 2 запроса. Я уже хз что придумать.
 
Ответить с цитированием

  #9  
Старый 16.10.2009, 10:57
Аватар для POS_troi
POS_troi
Познавший АНТИЧАТ
Регистрация: 01.12.2006
Сообщений: 1,769
Провел на форуме:
3718311

Репутация: 1118


Отправить сообщение для POS_troi с помощью ICQ
По умолчанию

под вечер скинь в пм файлик с самыми тяжкими случаями (строк 10-20) - распарсим (я какраз недавно распарсивал бэкап мускуля так что есть наработки). мож что и выйдет.
 
Ответить с цитированием

  #10  
Старый 16.10.2009, 11:31
Аватар для Byte_
Byte_
Участник форума
Регистрация: 07.09.2008
Сообщений: 139
Провел на форуме:
351188

Репутация: 65
По умолчанию

я вы предложил по шагам конструкция " or " - explode
у тебя ведь дамп, так? делаем примерно:
PHP код:
<?
$file 
file_get_contents('dump.sql');
$file explode("\r\n",$file);
$i 0;
foreach(
$file as $f)//парсим конструкцию or
{
if(!(
strpos($f,' or ')===false))
{
$f explode(' or ',$f);
$file[] = $f['0'];$file[] = $f['1']; //тут ещё нужно приписать гачало и конец запросов
$file[$i] = '';
}
$i++;
}
foreach(
$file as $f)if($f != '')$res .= "\r\n".$f;
?>
приблизительно так.

зы: пару не стандартных строк, если не сложно скинь лучше сюда. задачка интересная - я бы тоже подумал.
 
Ответить с цитированием
Ответ



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Защита БД MySQL от SQL инъекций с помощью GreenSQL xcedz Администрирование 5 02.04.2009 21:46
SQL injection в MySql сервере версии 3,x bandera Чужие Статьи 3 04.06.2006 16:17
Проблема с выводом данных из базы mysql Nova PHP, PERL, MySQL, JavaScript 10 31.03.2006 22:04
Общие Рекомендации Защиты (MySQL и SQL Web-интерфейс) k00p3r Чужие Статьи 0 13.06.2005 11:22
Защищаем MySql. Шаг за шагом k00p3r Чужие Статьи 0 13.06.2005 11:18



Здесь присутствуют: 1 (пользователей: 0 , гостей: 1)
 


Быстрый переход




ANTICHAT.XYZ