我使用MySql
作为 -
SELECT * FROM tab WHERE col LIKE '%myvalue%';
此工作正常并显示所有记录myvalue
。
现在问题是我有一些记录,例如my'value
,myva'lue
,myval-ue
和my-value
,并且还希望在搜索中包含这些记录。此外,当我搜索my'value
时,它应显示myvalue
和my-value
。
如何实现这一目标?任何帮助。是否可以使用LIKE
运算符?
答案 0 :(得分:2)
当您使用PHP时,如果有人使用您的搜索,您应该执行以下操作:
my'value
变为myvalue
)myvalue
变为%m%y%v%a%l%u%e%
)SELECT * FROM tab WHERE col LIKE '%m%y%v%a%l%u%e%'
任何其他解决方案都不符合您的所有要求。
答案 1 :(得分:1)
使用
SELECT * FROM tab WHERE col LIKE '%myvalue%' OR col LIKE '%my_value%'
下划线_
是一个单字符通配符。
答案 2 :(得分:0)
这个怎么样?
SELECT * FROM tab WHERE col LIKE 'my%' OR col LIKE '%value'
这将检查col
应该以my开头并以值结束。
由于可能有任何特殊字符和正则表达式不能与MySQL一起使用,我建议您通过将特殊字符替换为null然后将字符串与myvalue匹配来执行您想要在PHP中实现的目标。
希望这会对你有所帮助。
我完全不知道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.
}
}
答案 3 :(得分:0)
得到了这个......
PHP部分
$term = str_replace('-','',str_replace(',', '', str_replace('\'', '', $term)));
MySql Part
SELECT *
FROM tab
WHERE ((REPLACE(REPLACE(REPLACE(col, '\'', ''), ',', ''), '-', '') LIKE "%$term%")
OR (col LIKE "%$term%"));
请参阅 demo 。