mysql以任何顺序搜索多个关键字

时间:2016-02-05 17:33:39

标签: php mysql database search keyword

我有一个简单的MySQL数据库关键字搜索功能。但是,如果关键字的顺序与数据库中输入的顺序不同,则不会返回搜索结果。例如,搜索“狗猫狮子”将返回结果,但搜索“狗狮子猫”将不会返回任何结果。 任何有关如何解决此问题的帮助将不胜感激。这是我的代码。

<!doctype html>
<html>
<head>
<meta charset="utf-8">
<title>Part Search</title>
</head>

<body>
<?php
$username = "xxxx";
$password = "xxxx";
$hostname = "localhost"; 

//connection to the database
mysql_connect($hostname, $username, $password); 
mysql_select_db("wesco");

$search = mysql_real_escape_string(trim($_POST['searchterm']));

$find_parts = mysql_query("SELECT * FROM `parts` WHERE `keywords` LIKE '%$search%'");

while($row = mysql_fetch_assoc($find_parts))
{
$name = $row['name'];
echo "$name<br />";

}

?>
</body>
</html>

3 个答案:

答案 0 :(得分:1)

你可以使用这样的东西

$searchArray = explode(" ", $_POST['searchterm']);
$query = "";
foreach($searchArray as $val) {
    $search = mysql_real_escape_string(trim($val));
    if (!empty($query)) {
        $query = $query . " OR "; // or AND, depends on what you want
    }

    $query = $query . "`keywords` LIKE '%$search%'";
}

if (!empty($query)) {
    $find_parts = mysql_query("SELECT * FROM `parts` WHERE $query");
}

此外,您应该停止使用mysql_*函数并开始使用mysqli的面向对象实现。

答案 1 :(得分:0)

您需要订购查询。 如果你有一个auto_incremented Id,你可以去:

$find_parts = mysql_query("SELECT * FROM `parts` WHERE `keywords` LIKE '%$search%' ORDER BY row_id asc");

您可以按名称或任何其他方式订购:

$find_parts = mysql_query("SELECT * FROM `parts` WHERE `keywords` LIKE '%$search%' ORDER BY name asc");

答案 2 :(得分:0)

两个选项:

  1. 使用mysql搜索功能构建。
  2. https://dev.mysql.com/doc/refman/5.6/en/innodb-fulltext-index.html

    这可能是更好的解决方案。

    1. 如果您想继续使用LIKE,请按如下方式拆分单词。

      选择* 从部分 哪里 ( 关键词LIKE'%$ word1%' 和 关键词LIKE'%$ word2%' 和 关键词LIKE'%$ word3%' )