igortik
Новичок
Гловоломающая Регулярка
Стоит задача отправлять в объект один раз переменную $query, содержащую любой mysql-запрос.
Объект юзает функцию для обработки полученного ассоциативного массива, и, как приятное дополнение - должен отдать некий page_limiter (страничное разделение), т.е. мы не отправляем запрос еще раз, а сам метод объекта разбирает строку запроса и должен заменить первые SELECT ... FROM на SELECT count(*) FROM.
Все бы хорошо, и можно, на первый взгляд обойтись патерном SELECT .* FROM, но когда дело доходит до вложенных запросов, которые также в себе содержат SELECT.. FROM, например SELECT ... FROM .. WHERE `id`=(SELECT `id` FROM ...) и т.д. то начинаются пляски с бубном.
Я уже намучался с подбором вариантов и, потому прошу вашей помощи.
Сейчас стоит:
$query_count = preg_replace('/^SELECT (.++|\*)(\(.++FROM.++\))?(.++)? FROM/is','SELECT count(*) FROM',$this->query,1);
Также стоит учесть, что может быть банальный SELECT * FROM, которому подходит: .+
Этот пример выше $query_count подходит в 80% случаев ... но не подходит для иных вариантов.
Может кто решал подобного рода задачу, т.е. нам надо исключительно первые SELECT ... FROM заменить на SELECT count(*) FROM
Стоит задача отправлять в объект один раз переменную $query, содержащую любой mysql-запрос.
Объект юзает функцию для обработки полученного ассоциативного массива, и, как приятное дополнение - должен отдать некий page_limiter (страничное разделение), т.е. мы не отправляем запрос еще раз, а сам метод объекта разбирает строку запроса и должен заменить первые SELECT ... FROM на SELECT count(*) FROM.
Все бы хорошо, и можно, на первый взгляд обойтись патерном SELECT .* FROM, но когда дело доходит до вложенных запросов, которые также в себе содержат SELECT.. FROM, например SELECT ... FROM .. WHERE `id`=(SELECT `id` FROM ...) и т.д. то начинаются пляски с бубном.
Я уже намучался с подбором вариантов и, потому прошу вашей помощи.
Сейчас стоит:
$query_count = preg_replace('/^SELECT (.++|\*)(\(.++FROM.++\))?(.++)? FROM/is','SELECT count(*) FROM',$this->query,1);
Также стоит учесть, что может быть банальный SELECT * FROM, которому подходит: .+
Этот пример выше $query_count подходит в 80% случаев ... но не подходит для иных вариантов.
Может кто решал подобного рода задачу, т.е. нам надо исключительно первые SELECT ... FROM заменить на SELECT count(*) FROM