gpt4 book ai didi

php - 使用 PHP + AJAX 同时从两个 MySQL 表中获取数据

转载 作者:行者123 更新时间:2023-11-29 06:42:42 27 4
gpt4 key购买 nike

我正在创建一个搜索框,用于查询两个 MySQL 表并实时列出结果。但目前,我有一个工作原型(prototype),它只能查询一个表。我结合 JQuery 编写了以下 PHP 代码,它运行得非常好:

HTML

<input onkeyup="search(this);" type="text">
<ol id="search-results-container"></ol>

Javascript

function search(input) {
var inputQuery = input.value;
/* $() creates a JQuery selector object, so we can use its html() method */
var resultsList = $(document.getElementById("search-results-container"));
//Check if string is empty
if (inputQuery.length > 0) {
$.get("search-query.php", {query: inputQuery}).done(function(data) {
//Show results in HTML document
resultsList.html(data);
});
}
else { //String query is empty
resultList.empty();
}
}

和 PHP

<?php
include("config.php"); //database link

if(isset($_REQUEST["query"])) {
$sql = "SELECT * FROM students WHERE lastname LIKE ? LIMIT 5";

/* Creates $stmt and checks if mysqli_prepare is true */
if ($stmt = mysqli_prepare($link, $sql)) {
//Bind variables to the prepared statement as parameters
mysqli_stmt_bind_param($stmt, "s", $param_query);

//set parameters
$param_query = $_REQUEST["query"] . '%';

//Try and execute the prepared statement
if (mysqli_stmt_execute($stmt)) {
$result = mysqli_stmt_get_result($stmt);

//get number of rows
$count = mysqli_num_rows($result);
if ($count > 0) {
//Fetch result rows as assoc array
$row = mysqli_fetch_array($result, MYSQLI_ASSOC);
echo "<h1>Students:</h1>"; //Header indicates student list
for ($i = 0; $i < $count; $i++) {
$name = $row["lastname"];
echo "<p>$name</p>";
}
}
else { //Count == 0
echo "No matches found.<br>";
}
}
else { //Execution of preped statement failed.
echo "Could not execute MySQL query.<br>";
}

} // end mysqli_prepare

} // end $_RESQUEST isset

?>

students 表的详细信息是任意的,除了它有一个列出学生姓氏的 String 列。

我的问题是,还有一个 staff 表,它实际上与 students 相同,但用途不同。我想与 students 同时查询 staff 表,但将结果分开,如下所示:

<h1>Students:</h1>
<p>Student1</p>
<p>Student2</p>

<h1>Staff</h1>
<p>Staff1</p>
<p>Staff2</p>

显而易见的答案是添加另一个与第 5 行类似的 $sql 语句,并连续执行两个查询 - 有效地使搜索时间加倍 - 但我担心这也会花费太多时间长的。这是一个错误的假设(会有明显的时间差异),还是实际上有一种方法可以同时执行两个查询?提前致谢!

最佳答案

如果两个表具有相同的结构,或者如果存在可以使列的子集相同,则 UNION 查询可能会在此处起作用:

SELECT *, 0 AS type FROM students WHERE lastname LIKE ?
UNION ALL
SELECT *, 1 FROM staff WHERE lastname LIKE ?
ORDER BY type;

我删除了 LIMIT 子句,因为您没有 ORDER BY 子句,这使得使用 LIMIT 毫无意义。

请注意,我引入了一个计算列type,当结果集按其排序时,会将学生置于教职人员之前。然后,在 PHP 代码中,您只需要一些逻辑即可为学生和教职员工显示标题:

$count = mysqli_num_rows($result);
$type = -1;
while ($count > 0) {
$row = mysqli_fetch_array($result, MYSQLI_ASSOC);
$curr_type = $row["type"];

if ($type == -1) {
echo "<h1>Students:</h1>";
$type = 0;
}
else if ($type == 0 && $curr_type == 1) {
echo "<h1>Staff:</h1>";
$type = 1;
}
$name = $row["lastname"];
echo "<p>$name</p>";

--$count;
}

关于php - 使用 PHP + AJAX 同时从两个 MySQL 表中获取数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50893462/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com