2012-11-02 80 views
3

如何使用PHP Regex去除/删除MySQL查询中的所有值?使用PHP regex去除/删除MySQL查询中的所有值?

例子:

原: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

我相信很难找到这个正则表达式。实质上,您必须解析SQL,检测文本是否为“值”,然后将其删除。这可能是一个更好的方法来告诉我们你真正需要什么,因为没有值的查询对我来说真的没有意义。 – Sven

+0

我需要从SQL查询中删除所有值,因此SQL查询中只有sql命令,字段和表格 – Frank

+0

我们可以知道删除字面值后会留下什么。这并没有回答你为什么这样做的问题。如果你描述了你将要用一个SQL语句去掉它的值,也许我们可以建议一些其他的方法来做到这一点。 –

回答

3

你不能用任何正则表达式来做这件事,因为SQL不是regular language

要完成此任务,您需要使用SQL parser


关于您的评论编辑:

好吧,你需要建立一种“指纹”进行查询,这样就可以当他们在不断的值仅相差组查询在一起。

pt-query-digest工具可以做到这一点。它适用于慢查询日志或通用日志,但不适用于错误日志。但使用awk或其他方法将错误日志转换为pt-query-digest可以读取的格式并不困难。

+0

现在我使用正则表达式来管理它 – Frank