替换mysql查询中的字符不起作用

时间:2016-04-18 23:30:40

标签: php mysql database replace character

我有一个包含不同项目(3个列)的信息的数据库。 " itemname"的值列(正在搜索的列)包含特殊字符,这使得用户很难找到他们要查找的内容。

格式:"刺刀/大理石褪色(崭新出厂)"

现在用户必须输入确切的结构,包括" /"和"("和")"。我想要忽略这些角色,以便" Bayonet Marble"将产生与" Bayonet / Marble"相同的结果。

我的(工作)查询:

"SELECT itemname, itemprice, itemupdate FROM pricedata WHERE itemname LIKE '%" . $search . "%' ORDER BY itemprice DESC LIMIT 20");

我发现忽略/的非工作解决方案。

"SELECT itemname, itemprice, itemupdate FROM pricedata WHERE replace(itemname, ' / ', ' ') LIKE '%" . $search . "%' ORDER BY itemprice DESC LIMIT 20");

值不应永久更改。仅用于查询。

这样做的正确方法是什么?我做错了什么?

非常感谢! :)

2 个答案:

答案 0 :(得分:0)

我提倡在你进行查询之前做一些艰苦的工作。 PHP具有使用字符串的出色功能。在这种情况下,您可以删除任何您不想要的字符,然后将字符串拆分为空格,最后根据单个单词构建查询:

$user_query = 'word1 (word2 word3';

//remove any stray characters you don't want
$remove = array('/', '\\', '(', ')');
$cleaned = str_replace($remove, "", $user_query); 

//breaks string at spaces
$words = explode(" ", $cleaned); 
print_r($words);

//finally, build the query
$query = "SELECT itemname, itemprice, itemupdate FROM pricedata WHERE ";

$count = count($words);

for($i = 0; $i < $count; $i++){
    if(strlen($words[$i]) > 0){
        $query .= 'itemname LIKE %' . $words[$i] . '% ';
        if($i < ($count - 1)){
            $query .= 'OR '; //could also be AND
        }
    }
}

$query .= "ORDER BY itemprice DESC LIMIT 20";

答案 1 :(得分:0)

用空格替换斜杠后,现在两个单词之间留有3个空格。在“喜欢”匹配中,空格也必须匹配。

尝试替换所有空白区域在搜索字段中,并使用空字符串搜索字符串。或者具有单个空格的多个连续空白区域。