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");
两个选项:
- 使用内置的 mysql 搜索功能。
https://dev.mysql.com/doc/refman/5.6/en/innodb-fulltext-index.html
这可能是更好的解决方案。
如果要继续使用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 的面向对象实现。
我有一个简单的 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");
两个选项:
- 使用内置的 mysql 搜索功能。
https://dev.mysql.com/doc/refman/5.6/en/innodb-fulltext-index.html
这可能是更好的解决方案。
如果要继续使用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 的面向对象实现。