簡體   English   中英

具有特殊字符的MySql搜索

[英]MySql Search With Special Character

我使用MySql從數據庫中搜索記錄為 -

SELECT * FROM tab WHERE col LIKE '%myvalue%';

這工作正常並顯示具有myvalue所有記錄。

現在的問題是我有一些記錄,如my'valuemyva'luemyval-uemy-value ,還想在搜索中包含這些記錄。 此外,當我搜索my'value那么它應該顯示myvaluemy-value

怎么做到這一點? 任何幫助。 是否可以使用LIKE運算符?

當您使用PHP時,如果有人使用您的搜索,您應該執行以下操作:

  1. 通過$ _POST獲取搜索字詞
  2. 從搜索詞中刪除所有特殊字符( my'value變為myvalue
  3. 用MySQL通配符替換搜索詞( myvalue變為%m%y%v%a%l%u%e%
  4. 執行SELECT * FROM tab WHERE col LIKE '%m%y%v%a%l%u%e%'

任何其他解決方案都不符合您的所有要求。

SQL小提琴: http ://sqlfiddle.com/#!2/20f811/2

采用

SELECT * FROM tab WHERE col LIKE '%myvalue%' OR col LIKE '%my_value%'

下划線_是單個字符通配符。

這個怎么樣?

SELECT * FROM tab WHERE col LIKE 'my%' OR col LIKE '%value'

這將檢查col應該從我開始並以值結束。

演示


編輯1

因為可以有任何特殊字符和regexp不能與MySQL一起工作,我建議你通過將特殊字符替換為null然后將字符串與myvalue匹配來做你想要在PHP中實現的目標。

希望這對你有所幫助。


編輯2

我完全不知道php,但可以告訴你該做些什么。

mysql = "SELECT id, col FROM tab WHERE col LIKE '%my%' OR col LIKE '%value%'";
rs = mysql.execute();
String newString = "";
while (rs.next()) {
    newString = rs.getString(2);
    newString = new string after replacing special characters using regexp
    if (newString.equals("myvalue")) {
        // your code here..... this is place what you wanted.
    }
} 

收到...

PHP部分

$term = str_replace('-','',str_replace(',', '', str_replace('\'', '', $term)));

MySql部分

SELECT *
FROM tab
WHERE ((REPLACE(REPLACE(REPLACE(col, '\'', ''), ',', ''), '-', '') LIKE "%$term%") 
OR (col LIKE "%$term%"));

看這個演示

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM