我希望能夠將任何給定的字符與WHERE子句匹配。mySql匹配字符串中的任何字符
例如,如果我有以下描述字段
「藍T恤XL與背面獅子」
後的表項:
SELECT* FROM products WHERE name LIKE 'tshirt'
。 ..沒有返回
我也許可以在php中爆炸字符串,並在每個字母后使用通配符%,但是這個soun d像一個小任務的很多操作。
有沒有人有更好的方法來解決這個問題?
非常感謝
我希望能夠將任何給定的字符與WHERE子句匹配。mySql匹配字符串中的任何字符
例如,如果我有以下描述字段
「藍T恤XL與背面獅子」
後的表項:
SELECT* FROM products WHERE name LIKE 'tshirt'
。 ..沒有返回
我也許可以在php中爆炸字符串,並在每個字母后使用通配符%,但是這個soun d像一個小任務的很多操作。
有沒有人有更好的方法來解決這個問題?
非常感謝
最後我做這樣的:
$filter = implode('%',str_split($filter));
$filter = '%'.$filter.'%';
,然後執行SQL:
select * from產品名稱像$ filter
您必須添加%
這是在像wildcard ..
SELECT* FROM products WHERE name LIKE '%shirt%'
你應該使用%
:
SELECT* FROM products WHERE name LIKE '%tshirt%'
%
是零個或更多的替代品字符。
由於信件可能會改變,你應該將其轉換爲下限或上限:
配套完善查詢:
SELECT * FROM products
WHERE lower(name) LIKE '%tshirt%'
OR lower(name) LIKE '%t_shirt%'
_
是單個字符的替代品。
查看更多示例wildcards。
SELECT * FROM products WHERE name LIKE '%tshirt%';
這匹配任何包含字符串'tshirt'的字符串。 %是通配符。
首先,你需要通配符:因爲連字符的
where name like '%tshirt%'
然而,這仍然無法完全幫助。您也可以使用lower()
確保該案件無關緊要。也許這就是更多你想要什麼:
where replace(lower(name), '-', '') like '%tshirt%'
或者是:
where lower(name) like '%t%shirt%'
在你說你想要一個更好的方法之後,你目前有4個人建議通配符......在那裏_可能_是修改你的數據庫的方法(例如,添加一個關鍵字列並與之匹配)來獲得您最終想要的;如果你澄清你想要的東西,你可能會得到更好的答案 – Foon 2015-02-23 12:53:23