Php mysql任意顺序多关键字搜索
我有一个简单的MySQL数据库关键字搜索功能。但是,如果关键字的顺序与在数据库中输入的顺序不同,则不会返回搜索结果。例如,搜索“狗-猫-狮子”将返回结果,但搜索“狗-狮子-猫”将不返回结果。 如果您能帮助解决此问题,我们将不胜感激。这是我的密码Php mysql任意顺序多关键字搜索,php,mysql,database,search,keyword,Php,Mysql,Database,Search,Keyword,我有一个简单的MySQL数据库关键字搜索功能。但是,如果关键字的顺序与在数据库中输入的顺序不同,则不会返回搜索结果。例如,搜索“狗-猫-狮子”将返回结果,但搜索“狗-狮子-猫”将不返回结果。 如果您能帮助解决此问题,我们将不胜感激。这是我的密码 <!doctype html> <html> <head> <meta charset="utf-8"> <title>Part Search</title> </head&g
<!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>
您需要对查询进行排序。 如果您有一个自动递增的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");
两种选择:
使用内置的mysql搜索功能。
这可能是更好的解决方案
如果您想继续使用LIKE,请按如下方式拆分单词
挑选*
从零件
哪里
“%$word1%”之类的关键字
和
“%$word2%”之类的关键字
和
“%$word3%”之类的关键字
你可以用这样的东西
$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的面向对象实现。对于解决方案2,我是否需要为每个搜索元素插入“%$word%”?如果我希望能够使用无限数量的关键字怎么办?您需要动态生成sql语句。解决方案1似乎更干净,如果你可以改变你的数据库。谢谢你的解决方案,但我似乎无法让这个代码返回任何结果现在…得到它的工作。谢谢