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


Replace characters in mysql query doesn't work

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

格式:"卡口/大理石渐变(出厂新)"

现在,用户必须键入确切的结构,包括"/"answers"("answers")"。我希望这些字符被忽略,这样"刺刀大理石"将给出与"刺刀/大理石"相同的结果。

我的(工作)查询:

"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");

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

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

非常感谢!:)

我主张在开始查询之前先做一些艰苦的工作。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";

用空格替换斜线后,两个单词之间只剩下3个空格。在"类"匹配中,空格也必须匹配。

尝试用空字符串替换搜索字段和搜索字符串中的所有空格。或者多个连续的空白与一个空格。