2012-11-02 112 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