什么是php-mysql搜索的最佳查询?

时间:2016-10-31 08:50:17

标签: php mysql

我有一个很直接的搜索引擎。查询如下。

$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/

1 个答案:

答案 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