簡體   English   中英

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

[英]What is the best query for php-mysql search?

我有一個非常簡單的搜索引擎。 查詢如下。

$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列中看到數據。 或者,如果我僅單獨搜索地點或國家/地區或日期,則可以正確顯示數據。 但是,如果我同時搜索(例如)事件名稱和放在一起的搜索結果,則搜索結果將不會顯示任何內容。 使用此查詢,我需要進行哪些更改才能使其正常運行?

另外,我想說的是,我已經看到一些查詢,例如“ 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/

我相信您的搜索查詢詞是“ 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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM