【问题标题】:Replace characters in mysql query doesn't work替换mysql查询中的字符不起作用
【发布时间】:2016-08-10 21:38:04
【问题描述】:

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

格式:“Bayonet / Marble Fade (Factory New)”

现在用户必须输入准确的结构,包括“/”和“(”和“)”。我希望忽略这些字符,因此“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");

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

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

非常感谢! :)

【问题讨论】:

  • 嘿,托马斯!我看到您正在寻求改进数据库搜索,以便它们对拼写差异不那么敏感。虽然我无法回答这个问题,但我可以建议您简化文本:如果您更简洁,SQL 专家更有可能阅读并帮助您解决问题。 (例如,您可能可以去掉前两段,然后说“我正在尝试构建一个可搜索的项目数据库。名称很复杂,因此用户很难找到他们要查找的内容。”更简单,相同数量的上下文。)欢迎使用 Stack Overflow:祝项目好运!
  • 你好迪伦,谢谢你的好话。我试图尽可能缩短它。我希望有人能帮助我。 :)
  • 更清晰!很高兴能帮上忙。
  • 你是。祝你有个愉快的夜晚!
  • 您是否考虑过使用全文索引而不是LIKE?因为即使您替换了所有特殊字符,用户仍然必须获得正确数量的空格。而且查询会很慢,因为它不能使用索引。

标签: php mysql database replace character


【解决方案1】:

我主张在进行查询之前先进行艰苦的工作。 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";

【讨论】:

    【解决方案2】:

    将斜线替换为空格后,现在在两个单词之间留有 3 个空格。在“like”匹配中,空格也必须匹配。

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2017-07-10
      • 2015-06-24
      • 2012-07-23
      • 2013-03-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多