[英]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_id
, user_id
和band_name
, username
。
您可以通過不同的方式解決此問題:
創建兩個單獨的查詢。 然后從bands查詢中獲取所有結果,並將它們放入一個數組中,然后將用戶查詢中的所有結果放入另一個數組中。 然后,回顯兩個數組的結果。
讓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.