Php 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

我有一个简单的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>

您需要对查询进行排序。 如果您有一个自动递增的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似乎更干净,如果你可以改变你的数据库。谢谢你的解决方案,但我似乎无法让这个代码返回任何结果现在…得到它的工作。谢谢