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

Статус
В этой теме нельзя размещать новые ответы.

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 в массив. Основная цель - повышение КПД) - уменьшить кол-во обращений к БД, повысить скорость выполнения скрипта, ну и в этом духе все)

Буду благодарен за любую помощь по сабжу!)
 
в приведенном вами коде для полученния всех строк таблицы у вас используется только один запрос
многократный вызов mysql_result() не является запросом, а является обработкой уже выполнившегося запроса.
никаких проблем в плане производительности в этом плане не вижу
Но, вот mysql_num_rows() я бы вам посоветовал предвычислить, потому что в данном случае оно у вас постоянно выполняется, что не благоприятсвует скорости. хотя это всего лишь чайная ложка в поваышение производительности
 
может быстрее будет если запросить только те поля, что проходят по regex:

Код:
SELECT *
FROM tablica
WHERE fieldname REGEXP '[0-9a-z_]+@[0-9a-z_^\.]+\.[a-z]{2,4}'
 
TC, погуглите.

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

Т.е. в сам запрос SQL можно вставлять регулярные выражения.
 
Статус
В этой теме нельзя размещать новые ответы.
Назад
Сверху