2016-02-05 59 views
-1

我有一个简单的MySQL数据库关键字搜索功能。但是,如果关键字与数据库中输入的顺序不同,则不会返回搜索结果。例如,搜索“狗猫狮子”会返回结果,但搜索“狗狮子猫”将不会返回结果。 任何关于如何解决这个问题的帮助将不胜感激。这是我的代码。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> 

回答

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"); 
} 

此外,你应该停止U唱出mysql_*函数并开始使用mysqli的面向对象实现。

+0

谢谢你的解决方案,但我似乎无法得到此代码现在返回任何结果... – bwc123

+0

得到它的工作。谢谢! – bwc123

+0

不客气;) – drosam

0

您需要订购查询。 如果你有一个auto_incremented编号,你可以去:

$find_parts = mysql_query("SELECT * FROM `parts` WHERE `keywords` LIKE '%$search%' ORDER BY name asc"); 
0

两个选项:

  1. 使用构建在MySQL的搜索功能

    $find_parts = mysql_query("SELECT * FROM `parts` WHERE `keywords` LIKE '%$search%' ORDER BY row_id asc"); 
    

    您可以按名称或真的什么订购。

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

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

  1. 如果您想要继续使用LIKE,请按如下方式拆分单词。

    SELECT * 从零部件 其中 ( 关键字LIKE '%$字1%' 和 关键字LIKE '%$单词2%' 和 关键字LIKE '%$ WORD3%' )

+0

解决方案#2我需要为每个搜索元素插入'%$ word#%'吗?如果我想要使用无限数量的关键字,该怎么办? – bwc123

+0

你需要动态生成一个sql语句。如果您可以更改数据库,解决方案1对我来说似乎更清洁。 –