[英]How can I use '\' in SQL LIKE ... ESCAPE '\'
[英]How can I use RLIKE to effectively combine LIKE and IN, *and* escape regex characters where needed?
我需要弄清楚如何在數據庫中查詢序列A或序列B或序列C ,但是由於種種限制,這很難導航。
先前的解決方案使用LIKE
(例如SELECT * FROM Table WHERE Serial LIKE
)-在搜索所有序列( %
)或特定序列( Serial A
)時效果很好。 但是,我很快發現IN
和LIKE
不能在MySql中合並,並且LIKE
使用的通配符不夠靈活,無法找到Serial A或Serial B或Serial C。
(注意:實際的序列有很大的不同,沒有一致的約定-我知道可以使用%
通配符找到與這些基本示例一樣簡單的序列)
我立即想到的是改用RLIKE
但是某些序列被命名為B + 3
東西,並且必須逃避才能找到。 在這里,我以為使用一種轉義字符的方法,例如preg_quote()
-但是其中存在系統結構方面的更多問題...
選擇約束模塊
通過查詢數據庫(例如SELECT DISTINCT Serial FROM Table
)來填充組合框,用戶可以從中選擇一個序列,然后提交表單。 選定的序列作為GET
值傳遞到下一頁。
查看結果模塊
$serial
變量的內容作為參數傳遞給SQL查詢,以在頁面上生成結果。 $serial
可以由View Results Module所屬的頁面填充,也可以由傳遞給該頁面的GET
值填充(如果該模塊在include
d之前尚未填充該值,並且沒有GET
值,將會引發錯誤)。
這種結構讓我有些困惑。 如果這是由用戶傳遞的,則使用RLIKE
和preg_quote()
來搜索序列似乎很簡單。 preg_quote()
可以在$serial
作為參數傳遞之前使用,並且更新的( WHERE Serial RLIKE
)查詢應該可以按預期工作。 但是,我仍然不知道如何搜索多個序列。
如果我將$serial
指定為(Serial A | Serial B | Serial C)
則preg_quote()
將轉義正則表達式字符並找不到它們。 但是,如果我不使用preg_quote()
,將找不到諸如B + 3
序列,因為正則表達式字符未轉義。
我非常感謝您對改進此問題的任何反饋-我已盡力盡可能清楚地解釋了該問題,但由於上下文和約束的復雜性,使其很難處理。 謝謝。
轉義子字符串,而不是最終的正則表達式。
"(" . preg_quote(serialA) . "|" . preg_quote(serialB) . "|" . preg_quote(serialC) . ")"
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.