我有一个简单的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>
答案 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)
两个选项:
https://dev.mysql.com/doc/refman/5.6/en/innodb-fulltext-index.html
这可能是更好的解决方案。
如果您想继续使用LIKE,请按如下方式拆分单词。
选择* 从部分 哪里 ( 关键词LIKE'%$ word1%' 和 关键词LIKE'%$ word2%' 和 关键词LIKE'%$ word3%' )