簡體   English   中英

PHP-使用多個MySQL表進行實時搜索

[英]PHP - Live Search using multiple MySQL tables

我搜尋了互聯網,但找不到類似我的問題的東西。 我正在嘗試構建一個實時搜索功能,該功能可以從多個表中提取數據。 它可以在一張桌子上工作,但我希望能夠從樂隊,用戶(專輯等)中拉取

這是我的PHP代碼:

require ("includes/config/config.php"); 

$search_term = sanitize(htmlentities($_POST['search_term']));

if (!empty($search_term)){

    $search = "(SELECT `band_id`, `band_name` FROM `bands` WHERE `band_name` LIKE '%$search_term%'  LIMIT 0, 5) 
                UNION ALL
                (SELECT `user_id`, `username` FROM `users` WHERE `username` LIKE '%$search_term%'  LIMIT 0, 5)";
    $query = mysqli_query($conn, $search);
    $result = mysqli_num_rows($query);

    while ($row = mysqli_fetch_assoc($query)){
        #$user_id = $row['user_id'];
        #$username = $row['username'];
        $band_id = $row['band_id'];
        $band_name = $row['band_name'];
        $check = mysqli_num_rows($query);



        if ($check != 0){
            echo "<a style='text-decoration: none; color: black;' href='index.php?band=$band_id'><li class='searchResults'>" . ucfirst($band_name) . "</li></a>";
        } else {
            echo "<li class='searchResults'>No Results Found</li>";
        }
    }
}

jQuery的:

$("#searchbar").keyup(function(){
    var searchTerm = $(this).val();

    $.post('search.php', { search_term: searchTerm}, function(data){

        $(".searchResults").html(data);
        $("#searchUl").css("display", "block");
    });
});

再一次,其他一切都運行良好,但是我不知道如何以某種方式查詢多個表,因此我可以以不同的方式回顯href(即band的index.php?band = $ band_id和index.php?user = $ user_id為用戶。

問題是通過執行UNION ALL會丟失信息,無論是唱片是樂隊還是用戶。 這會將不同類型的記錄放入同一集合中,並合並band_iduser_idband_nameusername

您可以通過不同的方式解決此問題:

  1. 創建兩個單獨的查詢。 然后從bands查詢中獲取所有結果,並將它們放入一個數組中,然后將用戶查詢中的所有結果放入另一個數組中。 然后,回顯兩個數組的結果。

  2. 讓MySQL告訴您每一行的類型。 您可以通過如下更改查詢來實現:

     ( SELECT `band_id` , `band_name` , "band" AS `type` FROM `bands` WHERE `band_name` LIKE '%$search_term%' LIMIT 0 , 5 ) UNION ALL ( SELECT `user_id` , `username` , "user" AS `type` FROM `users` WHERE `username` LIKE '%$search_term%' LIMIT 0 , 5 ) 

    您的查詢結果現在將有一個名為type的附加列,其中將包含"band""user" 根據該列的值,您可以回顯不同的鏈接。

    例如,您可以這樣擴展代碼:

     if($row["type"] === "band") { echo "somelink?band_id=" . $row["band_id"]; } else { echo "somelink?user_id=" . $row["band_id"]; } 

    請注意,在兩種情況下,您都需要讀取$row["band_id"]因為$row["band_id"]將從查詢的第一部分獲取列名。 所有用戶ID將在band_id列中。

暫無
暫無

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

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