2012-11-02 1 views
3

Как удалить/удалить все значения из MySQL запросов с помощью PHP Regex?Стрип/удалить все значения из запроса MySQL с помощью регулярного выражения PHP?

Пример:

оригинал: SELECT id, abc FROM mytable WHERE id IN (12, 15)
полосатые: SELECT id, abc FROM mytable WHERE id IN()

оригинал:

SELECT ut.id, IF(stagiaire_devis.id IS NOT NULL, CONCAT(ut.prenom, ' (my lovely)', ut.prenom) AS value FROM quality AS uq, avocate, utility AS ut LEFT JOIN stagiaire_devis ON (stagiaire_devis.id_devis='1293049' AND stagiaire_devis.id_utilisateur=ut.id) WHERE uq.id_utilisateur = ut.id AND avocate.id_utilisateur = ut.id AND avocate.deleted = 0 AND avocate.id_avocat_liste_cabinet = 7 AND uq.id_liste_qualite IN (5,2,9) AND uq.actif = 2 ORDER BY ut.prenom 

полосатые:

SELECT ut.id, IF(stagiaire_devis.id IS NOT NULL, CONCAT(ut.prenom, '', ut.prenom) AS value FROM quality AS uq, avocate, utility AS ut LEFT JOIN stagiaire_devis ON (stagiaire_devis.id_devis='' AND stagiaire_devis.id_utilisateur=ut.id) WHERE uq.id_utilisateur = ut.id AND avocate.id_utilisateur = ut.id AND avocate.deleted = AND avocate.id_avocat_liste_cabinet = AND uq.id_liste_qualite IN() AND uq.actif = ORDER BY ut.prenom 

Я не могу найти правильное регулярное выражение :(

+1

Я бы поверила, что найти это Regex трудно. По сути, вам нужно проанализировать SQL, определить, является ли текст «значением» или нет, а затем удалить его. Возможно, это лучший подход, чтобы рассказать нам, что вам действительно нужно, потому что запрос без значений для меня действительно не имеет смысла. – Sven

+0

Мне нужно удалить все значения из SQL-запроса, поэтому в SQL-запросе будет только команда sql, поле и таблица. – Frank

+0

Мы можем сказать, что останется после удаления значений литерала. Это не отвечает на вопрос о том, почему вы это делаете. Если вы опишете, что вы собираетесь делать с оператором SQL, который имеет свои значения, возможно, мы можем предложить другой способ сделать это. –

ответ

3

Вы не можете сделать это с любым регулярным выражением, потому что SQL не является regular language.

Для выполнения этой задачи вам необходимо использовать SQL parser.


Редактировать относительно вашего комментария:

Хорошо, вы должны установить своего рода «отпечатки пальцев» для запроса, так что вы можете сгруппировать запросы вместе, когда они отличаются только постоянными значениями.

pt-query-digest инструмент может это сделать. Он работает с журналом медленного запроса или общим журналом, но не с журналом ошибок. Но, вероятно, нетрудно использовать awk или что-то, чтобы преобразовать ваш журнал ошибок в формат, который может прочитать pt-query-digest.

+0

Я управляю им с помощью regex – Frank

 Смежные вопросы

  • Нет связанных вопросов^_^