Парсер БД. Поиск регулярки в указанном поле таблицы

Тема в разделе "Базы данных", создана пользователем prof.seo, 29 янв 2010.

Статус темы:
Закрыта.
Модераторы: latteo
  1. prof.seo

    prof.seo Постоялец

    Регистр.:
    25 мар 2009
    Сообщения:
    60
    Симпатии:
    20
    Час добрый,
    осваеваю пхп, дошел до баз данных, нужна помощь!)
    Есть необходимость написать скрипт - парсер бд, который будет осуществлять поиск регулярного выражения по заданному полю таблицы и записывать результат в файл. Специфика заключается в том, что размер таблицы ~150мб. На данный момент решение такое:

    PHP:
    $DBQuery mysql_query("SELECT * FROM tbl1");
    $Field =  'fieldname';
    for (
    $c=0$c<mysql_num_rows($DBQuery); $c++)
    {
    $FieldContent mysql_result ($DBQuery$c$Field);
    preg_match_all("/[0-9a-z_]+@[0-9a-z_^\.]+\.[a-z]{2,4}/i",$FieldContent$Result);
    for(
    $ResultCount=0$ResultCount count($Result[0]); $ResultCount++)
        {
        
    WriteString ($Result[0][$MailsCount]);
        }
    }
    В таблице >50000 записей, получается, что мой скрипт сделает столько же запросов - это очень долго и помоему не очень рационально.
    Возможно ли за один запрос получить содержимое нескольких полей?
    Те получить содержимое поля $Field для записей с 1 по 30 в массив. Основная цель - повышение КПД) - уменьшить кол-во обращений к БД, повысить скорость выполнения скрипта, ну и в этом духе все)

    Буду благодарен за любую помощь по сабжу!)
     
  2. Alternator

    Alternator

    Регистр.:
    23 мар 2009
    Сообщения:
    295
    Симпатии:
    145
    в приведенном вами коде для полученния всех строк таблицы у вас используется только один запрос
    многократный вызов mysql_result() не является запросом, а является обработкой уже выполнившегося запроса.
    никаких проблем в плане производительности в этом плане не вижу
    Но, вот mysql_num_rows() я бы вам посоветовал предвычислить, потому что в данном случае оно у вас постоянно выполняется, что не благоприятсвует скорости. хотя это всего лишь чайная ложка в поваышение производительности
     
    prof.seo нравится это.
  3. polyetilen

    polyetilen Заблокирован

    Регистр.:
    10 авг 2006
    Сообщения:
    814
    Симпатии:
    474
    может быстрее будет если запросить только те поля, что проходят по regex:

    Код:
    SELECT *
    FROM tablica
    WHERE fieldname REGEXP '[0-9a-z_]+@[0-9a-z_^\.]+\.[a-z]{2,4}'
    
     
    latteo и prof.seo нравится это.
  4. BasTaller

    BasTaller Постоялец

    Регистр.:
    29 янв 2009
    Сообщения:
    52
    Симпатии:
    1
    TC, погуглите.

    MySQL вполне себе даже поддерживает выборку по REGEXP - в примере от polyetilen это видно.

    Т.е. в сам запрос SQL можно вставлять регулярные выражения.
     
Статус темы:
Закрыта.