Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > PHP: Базы Данных > PARSE PREG SQL


Автор: Sanchezzz 20.3.2013, 16:43
Задача есть sql запрос Select я его хочу распарить на составляющие а именно меня интересует секция запроса select (.*)  from  (.*) where 
Знаю что есть монстро библиотека https://code.google.com/p/php-sql-parser/ которое (Юмор:http://developerslife.ru/20)

Но она громоздкая посему вынужден от нее отказаться .

Прощу помощи в регулярке
Код

// Для теста 
$sql = "SELECT articles.*, formats.format_title 
FROM articles 
INNER JOIN formats ON articles.article_format_id = formats.format_id 
INNER JOIN article_categories ON articles.article_id = article_categories.article_id 
WHERE article_categories.category_id = 2 
ORDER BY articles.article_date DESC";

preg_match('/^\s*'.
'SELECT\s+(?P<select_rows>.*[^\s])'. 
'\s+FROM\s+(?P<from>.*[^\s])'.
'(?:\s+WHERE\s+(?P<where>.*[^\s]))?'.
'(.*)$/is',$sql,$mather);

pre($mather);

Как сделать так что бы Where был не обязательным, ведь запрос может быть выполнен и без WHERE

Посути меня интересует только список таблиц для того что потом обратится к схеме и получить поля таблицы и построить AR  на основе SQL запроса и результата.
Где то читал, что можно explain  запрос прогнать и оттуда таблицы выдрать, но мне этот вариант как не очень показался.

Модераторы прощу прощения перенесите тему в общие вопросы.

Автор: Sanchezzz 23.3.2013, 20:38
Как оказалось бесполезная затея, вопрос закрыт. 

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)