1

我使用 as 从数据库中搜索记录MySql-

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

这工作正常并显示所有具有myvalue.

现在的问题是我有一些记录,例如,my'value和并且还想在搜索中包含这些记录。此外,当我搜索then 它应该显示and 。myva'luemyval-uemy-valuemy'valuemyvaluemy-value

如何做到这一点?任何帮助。是否可以使用LIKE运算符?

4

4 回答 4

2

当您使用 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

于 2012-11-29T10:49:15.620 回答
1

采用

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

下划线_是单字符通配符。

于 2012-11-29T10:32:56.320 回答
0

这个怎么样?

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

这将检查col应该以 my 开头并以 value 结尾。

演示


编辑 1

由于可能有任何特殊字符并且正则表达式不适用于 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.
    }
} 
于 2012-11-29T10:36:57.383 回答
0

收到...

PHP部分

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

MySql 部分

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

请参阅此演示

于 2012-12-07T05:34:30.770 回答