3

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

正しい正規表現が見つかりません:(

4

1 に答える 1

3

SQLは正規言語ではないため、正規表現ではこれを行うことはできません。

このタスクを実行するには、SQLパーサーを使用する必要があります。


あなたのコメントに関して編集してください:

さて、クエリの「フィンガープリント」の一種を確立して、定数値のみが異なる場合にクエリをグループ化できるようにする必要があります。

pt-query-digestツールはこれを行うことができます。低速クエリログまたは一般ログでは機能しますが、エラーログでは機能しません。awkしかし、エラーログをpt-query-digestが読み取れる形式に変換するために使用するのはおそらく難しいことではありません。

于 2012-11-02T16:41:07.417 に答える