Проблема с конвертацией базы mySQL

Discussion in 'PHP' started by GrAmOzEkA, 16 Oct 2009.

  1. GrAmOzEkA

    GrAmOzEkA Elder - Старейшина

    Joined:
    25 Jun 2006
    Messages:
    234
    Likes Received:
    76
    Reputations:
    29
    Народ помогите решить одну проблему. Есть база mySQL с серийниками к программам около 120 000. Структура базы такая:
    Code:
     __ ____ ______ _______ 
    |  |    |      |       |
    |ID|soft|serial|comment|
    |__|____|______|_______|
    В столбце soft находится информация о названии программы. В serial логины,серийники,ключи и т.д.
    Прблема состоит в том что я хочу разделить информацию о имени пользователя и серийнике:
    Code:
     __ ____ ______ _______ _______
    |  |    |      |       |       |
    |ID|soft| name |serial |comment|
    |__|____|______|_______|_______|
    Столбец name имя пользователя, serial серийник.

    Например было:
    Code:
    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');
    А надо:
    Code:
    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. Gray_Wolf

    Gray_Wolf Active Member

    Joined:
    7 Mar 2009
    Messages:
    377
    Likes Received:
    135
    Reputations:
    10
    Ну можно сделать бекап базы а потом просто сделать замену:
    s/n: на ' , 's/n:
    key: на ' , 'key:
    Ну или распарсить всю базу регулярками для надёжности...
     
  3. Byte_

    Byte_ Elder - Старейшина

    Joined:
    7 Sep 2008
    Messages:
    143
    Likes Received:
    34
    Reputations:
    2
    если я всё правильно понял, то нужно написать php скрипт с регуляркой, которая будет отделять NAME: ------ и до пробела в старой таблице и писать в новую.
    т.к. записей очень много - стоит воспользоваться LIMIT. что-бы в ручную не перезапускать скрипт - можно по завершению очередного цикла обработки отображать браузеру яваскрипт, который передаст в url следующее значение limit
     
  4. Gray_Wolf

    Gray_Wolf Active Member

    Joined:
    7 Mar 2009
    Messages:
    377
    Likes Received:
    135
    Reputations:
    10
    Много? о_О
     
  5. Byte_

    Byte_ Elder - Старейшина

    Joined:
    7 Sep 2008
    Messages:
    143
    Likes Received:
    34
    Reputations:
    2
    всё очень сильно зависит от сервера - где всё это лежит. ;)
     
  6. Gray_Wolf

    Gray_Wolf Active Member

    Joined:
    7 Mar 2009
    Messages:
    377
    Likes Received:
    135
    Reputations:
    10
    В любом случае подобные операции на "живой" БД делать нельзя, так что так и так придётся это делать на другой машине.
     
  7. Byte_

    Byte_ Elder - Старейшина

    Joined:
    7 Sep 2008
    Messages:
    143
    Likes Received:
    34
    Reputations:
    2
    согласен.
    Вот регулярку накидал
    Name: .*(?=s\/n)
    проверял на яваскрипте. работает, но нужно предварительно пробели пропарсить (что-бы 2 пробела в некоторых местах на один заменить)
     
  8. GrAmOzEkA

    GrAmOzEkA Elder - Старейшина

    Joined:
    25 Jun 2006
    Messages:
    234
    Likes Received:
    76
    Reputations:
    29
    Забыл сказать, иногда бывает что имени пользователя нет, а серийник есть, его надо перебросить из name в serial и занулить name, так же иногда встречаются конструкции:
    Их надо разбить на 2 запроса. Я уже хз что придумать.
     
  9. POS_troi

    POS_troi Elder - Старейшина

    Joined:
    1 Dec 2006
    Messages:
    1,569
    Likes Received:
    466
    Reputations:
    108
    под вечер скинь в пм файлик с самыми тяжкими случаями (строк 10-20) - распарсим (я какраз недавно распарсивал бэкап мускуля так что есть наработки). мож что и выйдет.
     
  10. Byte_

    Byte_ Elder - Старейшина

    Joined:
    7 Sep 2008
    Messages:
    143
    Likes Received:
    34
    Reputations:
    2
    я вы предложил по шагам конструкция " 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;
    ?>
    приблизительно так.

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

    GrAmOzEkA Elder - Старейшина

    Joined:
    25 Jun 2006
    Messages:
    234
    Likes Received:
    76
    Reputations:
    29
    Относительно стандартный запрос, которого большая часть в базе.
    Code:
    INSERT INTO `base_serials` VALUES (0,'5Xpence 3.9', 'Name: Registered User s/n: RJIVOFCIJIBV_DIJ', 'NULL', 'NULL');
    
    Вот немного выбрал нестандартных запросов.
    Code:
    INSERT INTO `base_serials` VALUES (0,'Adobe Photoshop CS3 10.0', 'S/N: 1045-0415-8060-3241-4388-1406<br>Crack for PowerBook G4 below<br>Your posted removal only works with Intel Macs<br>Remove Activation for PowerBook G4<br>Left Click on Photoshop CS3 app<br>Go to Show Package Contents<br>Open Contents Folder<br>Open Resources<br>Open AMT<br>Rename the file called application.sif to application.xx<br>', 'NULL', 'NULL');
    INSERT INTO `base_serials` VALUES (0,'Actioneer 1.10', 's/n: xqpr-7kcf-j8lh', 'NULL', 'NULL');
    INSERT INTO `base_serials` VALUES (0,'Falch Net Developer Studio 2.5.1.6', 'Email: silf@fukk.org  p/w: c7OEVNuY', 'NULL', 'NULL');
    INSERT INTO `base_serials` VALUES (0,'quickoffice 51', 'Install Password: bach420 s/n: 36000000', 'NULL', 'NULL');
    INSERT INTO `base_serials` VALUES (0,'007 Customer Search Expert 3.0', 'Name: EdeltraudFernandez Email: EdeltraudFernandez@snuttis.com s/n: bRIDqeMM ?`2#h_g[ 2g;dB4.Q', 'NULL', 'NULL');
    INSERT INTO `base_serials` VALUES (0,'1st Go Warkanoid II: Total 2.75', 'FirstName: uknl0gik [RAiD] LastName: RAiD Email: RAiD@RAiDiSM.com s/n: 501A-9576', 'NULL', 'NULL');
    INSERT INTO `base_serials` VALUES (0,'32bit Email Broadcaster 9.34.01', 'Name: Sponge Uk Email: SpongeUk@Home.Net s/n: 303737353B3C or Name: XSTATiQUE Email: XSTATiQUE@REFORM.COM s/n: 30363B34363A', 'NULL', 'NULL');
    INSERT INTO `base_serials` VALUES (0,'3D Custom Screensaver 1.0.325', 'Name: TEAM LUCiD  s/n: YG67T-11111-WCA0J KEY2: YG67T   KEY1: 11111   KEY5: WCA0J', 'NULL', 'NULL');
    INSERT INTO `base_serials` VALUES (0,'3d Fish! 2.65e', 'Name: aZZaZZeLLo [TSRh] Code: k35yg2dece7m5v2vugupfuy', 'NULL', 'NULL');
    INSERT INTO `base_serials` VALUES (0,'4 in 1 Line 1.0', 's/n: LASH12-XOILXPEMW or s/n: 101728-EXFBFAGCJ', 'NULL', 'NULL');
    INSERT INTO `base_serials` VALUES (0,'AbsoluteFTP 1.9.5', 'Name: Barbara Page Company: E.E. s/n: 02-19-025201 Key: 6119 8884 1832 7485 0176 Date: Never', 'NULL', 'NULL');
    INSERT INTO `base_serials` VALUES (0,'AbsoluteFTP 1.9.6', 'Name: Lonnie S. Porter Company:  s/n: 02-19-025884 LicenseKey: 0756 8446 9749 8142 3788 Expiration: Never', 'NULL', 'NULL');
    INSERT INTO `base_serials` VALUES (0,'Accessable Help Desk SE 1.0', 'Password: finesthour', 'NULL', 'NULL');
    INSERT INTO `base_serials` VALUES (0,'AccountLogon 2.2', 'Email: Nemesis@tnt2001.com s/n: AA29EAED0CE9', 'NULL', 'NULL');
    INSERT INTO `base_serials` VALUES (0,'Al Morale's Game Show Presenter 1.51', 'RegKey: 1510314169350 Code: 55489', 'NULL', 'NULL');
    INSERT INTO `base_serials` VALUES (0,'Al Morale's Game Show Presenter 2.0', 'RegKey: 1510314169350 CustID s/n: 55489', 'NULL', 'NULL');
    INSERT INTO `base_serials` VALUES (0,'Atrex 9.02', 'Name: Justic Corp s/n:7337 Licensed Copies: 50 Reg.Key: 1A2F8514EA0F0691 Option Key: 7D78FAD3868ED762', 'NULL', 'NULL');
    INSERT INTO `base_serials` VALUES (0,'Auto-Master 5.17', 'Name: ubique.daemon [Koma] serial [privat]: 743675 serial [gesch.]: 738698', 'NULL', 'NULL');
    INSERT INTO `base_serials` VALUES (0,'BlackICE Defender 2.9 Workstation', 'Key: 4189020-RS-A47B3', 'NULL', 'NULL');
    INSERT INTO `base_serials` VALUES (0,'Borland J Builder 6 Enterprise.Edition ', 's/n: 8UQG-SPX3VN-NSKA7M-MWAV AuthKey: 7AH-ET7   Licensestring: %EE%DA%CE%20%00%00%02%54%DF%DD%23%66%BD%83%DF%33%CD%02%1D%E0%D7%A1%14%C1%7E%28%A8%EA%C0%78%DE%77%3A%C3%B2%AB%58%92%02%14%81%8D%F4%0B%9C%27%79%90%DF%FE%7F%DF%23%7E%A7%F2%E0%39%A1%00%7B%81%AA%9C%1A%B0%5F%28%CB%E8%EB%41%A1%66%4E%F9%99%D9%56%87%01%66%D8%8E%FA%3C%FC%1D%3E%A4%BE%B5%0A%E7%0B%47%E3%AE%AF%5D%AA%5C%17%FD%EB%CA%76%B6%42%44%A6%AD%97%72%F6%20%1C%85%96%D3%6C%E5%1B%42%88%EA%DB%5E%91%09%0E%84%88%FD%4C%E1%68%46%8C%88%B3%73%F6%00%51%EA%F4%B4%42%E0%00%09%A2%F6%B1%46%A2%5B%0E%88%9F%FC%43%B4%2E%55%F1%9B%9B%45%90%1E%54%A8%8B%B0%6F%A5%25%46%C6%E0%90%04%99%2D%46%A2%DA%FB%19%9D%27%1C%C4%B9%C4%31%DF%62%01%91%C4%91%40%DE%1E%3E%9B%F9%CD%47%95%15%74%B0%C6%CE%64%8E%30%54%EA%BE%CC%09%D6%17%2D%D3%D0%C8%1F%ED%74%40%AE%F1%CC%6B%E2%5F%36%8C%AC%8D%52%C1%37%0B%8C%FC%D4%42%8F%44%01%ED%C9%C3%7C%EC%14%46%9C%F9%B8%5A%F9%5C%17%C0%CC%B5%2A%F0%7F%7D%D4%8B%F9%48%CE%11%1F%E7%D8%92%59%B9%25%2F%E0%89%FC%37%8B%71%55%C3%B9%B3%6E%E7%55%5C%F7%B8%F0%53%B7%27%3F%A7%DB%DD%60%BE%4E%19%B2%8E%BE%57%D0%29%2F%84%EA%F6%6E%91%70%0F%DB%E1%E1%2C%8E%19%2E%C8%EF%DC%0D%DA%4C%45%82%FE%F1%46%C0%6B%23%9E%D4%D4%13%D4%07%42%85%B1%D4%3D%DA%7E%1B%F6%CA%E4%4A%97%13%6D%E1%BE%C5%20%DF%1C%1A%E3%C1%F1%2D%C8%21%24%DF%E9%96%6C%F9%7D%64%F6%BC%E1%75%B9%54%22%DE%FD%81%4F%9A%6C%39%D0%A2%A6%1D%8A%5E%20%F2%D4%C0%4E%B0%15%73%FD%A3%84%7F%A5%23%1A%E6%83%C6%0D%A0%45%58%C5%CE%E1%62%F4%19%63%FF%86%89%76%EF%64%59%CD%8B%C2%32%ED%29%75%C7%C8%AD%58%F2%7F%0C%C2%E9%CF%59%D3%42%38%E0%FC%92%4B%8E%39%52%C2%CD%D6%0D%9E%1E%35%88%8D%C5%7E%E2%40%42%A6%A2%91%73%D4%1D%65%C4%EF%A1%4E%CF%02%42%E9%B5%EB%07%DC%39%13%C7%E7%DD%52%AC%7A%18%F9%AC%DF%7C%C4%76%4D%A3%A5%DA%07%80%06%7B%FF%81%F8%25%ED%07%34%CB%F9%D5%6B%A8%6E%21%C4%BF%E5%65%E7%48%76%9E%A9%AD%71%9E%3E%7F%A2%B5%B8%23%F7%13%61%CA%91%F0%51%A1%0D%27%EE%CA%D9%56%D7%68%30%DC%95%94%67%B1%60%5E%EE%94%E6%3D%90%0D%04%E2%F9%CC%1E', 'NULL', 'NULL');
    INSERT INTO `base_serials` VALUES (0,'Brains Breaker 3.1.02', 'Pack: Full Name: jioo ft. cb ID: supply@crazybytes.com s/n: N65F-HNX7-7HWF-VHWS', 'NULL', 'NULL');
    INSERT INTO `base_serials` VALUES (0,'Cabinet Manager 2001 3.x', 'Your Name: Royal Accezz Crew Cert No.: 1008993848 Lic No.: 3RE1497018133 or Your Name: A Valid Cabinet Manager User Cert No.: 1008994753 Lic No.: 3RE1497018599 or Your Name: A Valued Microlog Customer Cert No.: 1008994704 Lic No.: 3RE1497018437', 'NULL', 'NULL');
    INSERT INTO `base_serials` VALUES (0,'Video Convert Split Merge Studio 6.8.2 Build 567', 'S/N: Name        : Sezgin Mutlu<br>Organization: Turkey<br>Serial      : VCSMS5947428<br>', 'NULL', 'NULL');
    INSERT INTO `base_serials` VALUES (0,'PTravelAlarm 2.0505', 'S/N: S/N: 278-3965-1190<br>Active Key Enjoy<br>', 'NULL', 'NULL');
    INSERT INTO `base_serials` VALUES (0,'MConvert 6.7', 'S/N: 91426773<br>works on all 6.x versions<br>', 'NULL', 'NULL');
    INSERT INTO `base_serials` VALUES (0,'TimeOff 1.35', 'User name    : DOUG DC-10<br>Organization : MP2k<br>Serial number: 149328400-26234884<br>', 'NULL', 'NULL');
    INSERT INTO `base_serials` VALUES (0,'DeskCalc Tax Pro 3.3.0', '<b>Name:</b> .:Team ACME 2005:.<br><b>Company:</b> ACME Inc.<br><b>S/N:</b> CAL-V3-SSHZTYGOA', 'NULL', 'NULL');
    INSERT INTO `base_serials` VALUES (0,'FairStars Audio Converter 1.47', '<b>Name:</b> TEAM ViRiLiTY<br><b>P/N:</b> N2168576<br><b>S/N:</b> 6F18-213B-393D-373D', 'NULL', 'NULL');
     
  12. Byte_

    Byte_ Elder - Старейшина

    Joined:
    7 Sep 2008
    Messages:
    143
    Likes Received:
    34
    Reputations:
    2
    вот такие строчки всю картину портят(
    так получается, что уникальные поля тут только название проги и вот этот нейм-серийник. надо для удобства парсинга всё грамотно разбить сначала.
    я считаю, что удобнее всего будет для начала создать 2 тхт файла
    1) - неймы
    2) - серийники и прочая муть.
    потом привести второй файл в конструкцию вида Name:xxxxxx,s/n:xxxxxxxxx,E_mail:xxxxx
    и т.д.
    проже будет если есть возможность пообщаться по icq или skype. Пиши в личку любой контакт.
     
  13. GrAmOzEkA

    GrAmOzEkA Elder - Старейшина

    Joined:
    25 Jun 2006
    Messages:
    234
    Likes Received:
    76
    Reputations:
    29
    Я думаю может с начало отделить информацию вида:
    и записать её в файл, а все что останется записать в другой файл.
    Есть у кого примерные скрипты или программы для этого ?
     
  14. Gar|k

    Gar|k Moderator

    Joined:
    20 Mar 2009
    Messages:
    1,166
    Likes Received:
    266
    Reputations:
    82
    Поставь денвер, сделай дамп своей таблицы
    создай на локальном эту таблицу и напиши небольшой php скрипт

    PHP:
    $sql=mysql_query("select * from table");
    while(
    $row=mysql_fetch_assoc($sql)) {
    echo 
    "INSERT INTO 'base_serials' VALUES (".$row[.............)\n";
    }
    ВСЕ нужный дамп готов... остается только скопировать его в файл, создать на сервере таблицу нужного формата и mysql < dump.txt

    вот замарачиваются с регурялками....

    В цикле в этом можешь любую обработку данных впихнуть...

    Так же можешь этот скрипт кинуть сразу на сервер... тогда вообще ниче не придеся выводить )) сразу будешь в базу записывать из одной таблицы в другую..
     
    _________________________
    #14 Gar|k, 18 Oct 2009
    Last edited: 18 Oct 2009
  15. Gar|k

    Gar|k Moderator

    Joined:
    20 Mar 2009
    Messages:
    1,166
    Likes Received:
    266
    Reputations:
    82
    m0Hze, у меня просто были ситуации, когда нужно перенести информацию из совершенно другой структуры таблицы в новую (при апгрейде новой cms) и замарачиватся с дампами или шаманить над SQL запросами было ленивее чем накатать скрипт...

    А ЧТО ПРЕДЛАГАЕШЬ ТЫ? :)
     
    _________________________
  16. GrAmOzEkA

    GrAmOzEkA Elder - Старейшина

    Joined:
    25 Jun 2006
    Messages:
    234
    Likes Received:
    76
    Reputations:
    29
    Пробовал распарсить, с начало избавился от всего html в базе, потом сделал чтобы выводились строки в которых есть
    и записывались в файл, а то что не удовлетворяет запросу записывалось во второй файл,
    во втором файле вышло около 30% базы, короче я забил и не стал ипать мозг.
    Сделал просто запись информации из soft и serial в переменные и скачивание файла txt c содержанием:

    Code:
    .......+--^----------,--------,-----,--------^-,
    .......| ||||||||| `Serial--' | ...............O
    .......`+----------------Base-------^----------|
    ...........`\_,---------,---------,------------'
    .......... / XXXXXX /'|.........../'
    ........../ XXXXXX / `\........./'
    ........ / XXXXXX /.`-------'
    ......../ XXXXXX / 
    ...... / XXXXXX /            
    ......(________)
    ....... `------'
    Serial Information: 
    $soft 
    $serial 
    
    $comment (информация об крякере)
    
    З.Ы. Хотелось бы сделать, чтобы это записывалось в архив и скачивалось, но пока гуглю может есть что то подобное.
    Содержимое архива:
    Code:
    serial.txt (содержимое файла выше)
    .nfo (NFO)
    myproject.url (ccылка на проект)
    README.txt (прочая информация)
     
    #16 GrAmOzEkA, 18 Oct 2009
    Last edited: 18 Oct 2009
  17. Gar|k

    Gar|k Moderator

    Joined:
    20 Mar 2009
    Messages:
    1,166
    Likes Received:
    266
    Reputations:
    82
    Насчет архива если сайт хостится на unix сервере комманды tar, bzip2 - ищи описание в нете... файлы скриптом создаешь в /tmp/{random}/ и system('tar ...'); архив готов.
    можешь сохранять архивы чтобы патом не делать их заного просто копируя их в нужную папку и занося данные в таблицу....
     
    _________________________