当搜索词是包含空格的字符串时,如何在数据库中搜索?

时间:2012-01-13 10:59:48

标签: php mysql

我有这个字符串"Beautiful sunset"注意双空格

当我在数据库中搜索时:

SELECT * FROM images WHERE title LIKE '%$string%'

我搜索"Beautiful sunset"注意单个空格),它不会返回任何结果。

我该如何解决这个问题?

5 个答案:

答案 0 :(得分:1)

按空格分割字符串。 现在你有两个字符串,如$ str1,$ str2 修剪这两个字符串(即删除前导和尾随空格) 然后重建字符串 $ string = $ str1 +'%'+ $ str2

答案 1 :(得分:1)

试试这个

SELECT * FROM images WHERE where MATCH(title) AGAINST ('$string' IN BOOLEAN MODE)

检查此链接

http://dev.mysql.com/doc/refman/5.5/en/fulltext-boolean.html

答案 2 :(得分:0)

您可以使用空格将搜索字符串拆分为多个部分,然后为已拆分的每个部分构建一个类似这样的sql:

SELECT * FROM images WHERE title LIKE '%$part[0]%' 
or title LIKE '%$part[1]%'
or title LIKE '%$part[2]%'
or title LIKE '%$part[3]%'
...

确保跳过双倍空格/空白部分。

答案 3 :(得分:0)

您可以这样做的一种方法是使用字符串替换来替换带有通配符的空格:

    $string = str_replace(" ", "%", $string);
    $Query  = "SELECT * FROM images WHERE title LIKE '%$string%'";

答案 4 :(得分:0)

如果你不知道你将获得什么字符串(如果它不是“美丽的夕阳”),你可以爆炸字符串并根据它进行查询。像这样......

$c = false;
$stringtosearch = "Beautiful sunset";
$query = "SELECT * FROM images WHERE";
foreach(explode(" ", $stringtosearch) as $b)
{
   if ($c)
   {
     $query .= " or";
   }
   $query .= " title LIKE " . $b;
   $c = true;
}

之后你会得到带有查询字符串的变量$ query。