задачка с базой MySQL

Discussion in 'PHP' started by $Lemur$, 16 Jul 2011.

  1. $Lemur$

    $Lemur$ Elder - Старейшина

    Joined:
    7 Jan 2007
    Messages:
    70
    Likes Received:
    15
    Reputations:
    0
    есть большая база MySQL на 2гига, стоит на компе (на денвере) в этой базе в столбце List записи вида "|1|2007|469|16|690|79312|11462611|70456|1903007|4910134|1796823|"

    Что я хочу сделать:
    1)Экспортнуть записи из столбца List
    2)Почистить пустые строки
    3)Сделать перенос по | на новую строку
    4)Удалить и посчитать дубли

    пробовал php скрииптом
    PHP:
    <?php
        
    /* Соединяемся, выбираем базу данных */
        
    $link mysql_connect("localhost""root""") or die("Could not connect : " mysql_error());
        
    mysql_select_db("b56192_ohnoes") or die("Could not select database");
        
        
    /* Выполняем SQL-запрос */
        
    $query "SELECT * FROM `vkusers` limit 0,10000000";
        
    $result mysql_query($query) or die("Query failed : " mysql_error());
        
        
    /* открываю файл для записи */
        
    $file fopen ("group.txt","r+");
        
        
    /* Выводим результаты в html */
        
    print "<table>\n";
        while (
    $line mysql_fetch_array($resultMYSQL_ASSOC)) {
            print 
    "\t<tr>\n";
            foreach (
    $line as $col_value ) {
    $str $col_value;
      if ( !
    $file )
      {
        echo(
    "Ошибка открытия файла");
      }
      else
      {
        
    fputs $file$str);
      }
      }
      }
        print 
    "Complete";
        
    /* Закрываю файл*/
        
    fclose ($file);

      
      
        
    /* Освобождаем память от результата */
        
    mysql_free_result($result);

        
    /* Закрываем соединение */
        
    mysql_close($link);
    ?>
    на выхлопе худо бедно получается получить текстовик на 300 - 400 мб

    поделитесь мыслями как реализовать пункты 2-4

    UPD:

    как и говорил 'худо бедно' на диапозоне записей limit 10000000,20000000 выбивает на Fatal error: Out of memory (allocated 69730304) (tried to allocate 69205996 bytes) in X:\home\1.lc\www\ex.php on line 8
     
    #1 $Lemur$, 16 Jul 2011
    Last edited: 16 Jul 2011
  2. Gifts

    Gifts Green member

    Joined:
    25 Apr 2008
    Messages:
    2,494
    Likes Received:
    807
    Reputations:
    614
    $Lemur$ для того чтобы сделать 2,3,4 - вам не нужен пункт 1.

    Для 2 -
    Code:
    DELETE FROM `table` WHERE `List` = ''
    Для 3 -
    Code:
    UPDATE `table` SET `List` = replace(`List`, '|', char(10))
    Для 4 - http://habrahabr.ru/qa/1708/
     
    _________________________
  3. $Lemur$

    $Lemur$ Elder - Старейшина

    Joined:
    7 Jan 2007
    Messages:
    70
    Likes Received:
    15
    Reputations:
    0
    огрромное спасибо! Не смотря на мои опасения sql'ы сработали под PMA (боялся что выбъет по памяти) ан нет оба выполнились, 20 минут на загрузке ЦП 100% но выполнились))

    осталось решить пункт 4, как удалить дубли понял осталось их посчитать :)
     
  4. Gifts

    Gifts Green member

    Joined:
    25 Apr 2008
    Messages:
    2,494
    Likes Received:
    807
    Reputations:
    614
    $Lemur$
    Code:
    CREATE TABLE `dup_count` (
    `id`  integer NOT NULL ,
    `cnt`  integer NOT NULL ,
    PRIMARY KEY (`id`)
    );
    
    INSERT INTO `dup_count` SELECT `id`, count(*) FROM `dups` GROUP BY `val`;
    
    Чтобы потом просмотреть записи:
    Code:
    SELECT a.*, b.`cnt` FROM `table` a JOIN `dup_count` b ON a.`id` = b.`id` WHERE `cnt` > 1;
     
    _________________________
Loading...
Similar Threads - задачка базой MySQL
  1. GAiN
    Replies:
    3
    Views:
    7,287