mysql 任意顺序的多个关键字搜索

mysql multiple keyword search in any order

我有一个简单的 MySQL 数据库关键字搜索功能。但是,如果关键字与数据库中输入的顺序不同,则不会 return 编辑搜索结果。例如搜索 "dog cat lion" 将 return 结果,但搜索 "dog lion cat" 将 return 没有结果。 非常感谢有关如何解决此问题的任何帮助。这是我的代码。

<!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>

您需要订购您的查询。 如果你有 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");

两个选项:

  1. 使用内置的 mysql 搜索功能。

https://dev.mysql.com/doc/refman/5.6/en/innodb-fulltext-index.html

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

  1. 如果要继续使用LIKE,那么拆分的话如下。

    select * 从零件 在哪里 ( 像“%$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 的面向对象实现。