我有一个很直接的搜索引擎。查询如下。
$sql = "SELECT * FROM events WHERE eventname LIKE '%".$_POST["search"]."%'
OR place LIKE '%".$_POST["search"]."%'
OR country LIKE '%".$_POST["search"]."%'
OR date LIKE '%".$_POST["search"]."%'
LIMIT 40";
但是,问题是这个, 如果我在搜索框中放入'eventname'就可以了,它正确地从eventname列中查看数据。或者,如果我仅单独搜索地点,国家或日期,则会正确显示数据。但是,如果我搜索(例如)eventname和place一起搜索结果什么都没有显示。使用此查询我需要做些哪些更改才能使其正常工作?
另外我想说我看过一些像“MATCH ... AGAINST”这样的查询。虽然我不想使用它,但是如果没有其他方法可以对此进行“MATCH ... AGAINST”查询?
这是我的完整代码。他们很直接。我正在研究一个奇怪的客户项目,他希望它像这样,安全对他来说不是事实。因此,您可能会注意到一些安全问题将在以后解决。但首先是查询。
<?php
include_once("admin/connection/db.php");
$output = '';
$sql = "SELECT * FROM events WHERE eventname LIKE '%".$_POST["search"]."%'
OR place LIKE '%".$_POST["search"]."%'
OR country LIKE '%".$_POST["search"]."%'
OR date LIKE '%".$_POST["search"]."%'
OR date AND country LIKE '%".$_POST["search"]."%'
OR date AND place LIKE '%".$_POST["search"]."%'
OR date AND eventname LIKE '%".$_POST["search"]."%'
LIMIT 40";
$result = mysqli_query($db, $sql);
if(mysqli_num_rows($result) > 0) {
while($row = mysqli_fetch_array($result)) {
$output .= "<a class='search-result' href='".$row["link_pdf"]."'><li><i class='fa fa-trophy'> </i> ".$row["eventname"].'<br/>'.date('Y-m-d', strtotime($row["date"])).' || '.$row["place"].', '.$row["country"].'<img src="logos/'.$row["country"].'.png" width="30px" height="18px;" /></li></a>';
}
echo $output;
}else {
echo "<li>No Data Found Macthing Your Query</li>";
}
?>
以下是您可以直接查看的链接 http://speed-timing2.6te.net/
答案 0 :(得分:-2)
我相信您的搜索查询字词例如是“event_name place_name”,在这种情况下,您的查询将无效。您可以改为使用FULLTEXT搜索。
例如
at first set fulltext index for eventname, place, country field as those are string fields.
$sql = "SELECT * FROM (
SELECT *, MATCH (eventname, place, country) AGAINST ('".$_POST["search"]."' IN BOOLEAN MODE) AS score
FROM events
ORDER BY score DESC
) AS temp
WHERE temp.score>0 OR temp.date LIKE '%".$_POST["search"]."%'
";
请在此处查看手册http://dev.mysql.com/doc/refman/5.7/en/fulltext-boolean.html