gpt4 book ai didi

php - 从 HTML 表单中搜索多个 MySQL 表并按字母顺序返回数据

转载 作者:行者123 更新时间:2023-11-28 23:38:41 24 4
gpt4 key购买 nike

我想搜索我从 1 个表单创建的 3 个单独的表,并按字母顺序返回数据。目前,我可以使用下拉框(从我的表单)分别搜索 3 个表来选择一个表,但我在同时查询它们并按字母顺序返回所有数据方面做得不够。我一直在努力解决它,但我很挣扎。

目前,我的程序通过单独的表格搜索用户之前在我的表单中输入的内容。现在我希望能够一次搜索我的所有表格并按字母顺序返回信息,这意味着表格中的一些值可能会分散。

我有 3 个表:“Insecttable”、“birdtable”和“butterflytable”

有 3 个 Controller :“ControllerInsectTable”、ControllerBirdTable 和“ControllerButterflyTable”

我正在尝试制作另一个 Controller :可以搜索所有表的“ControllerAllTables”。

HTML:

<form name="searchForm" id="searchForm" method="POST" action="ControllerAllTables.php"> 
Search for: <input type="text" name="aSearch">
<input type="submit" name="searchButton" value="Search">
</form>

PHP:

    // Collect Data
// If an input has been given
if(isset($_POST["aSearch"])) {
$searchq = $_POST["aSearch"];
$searchq = preg_replace("#[^0-9a-z]#i","",$searchq); //Can only search words

// Select statements if keywords match
$sql = "SELECT * FROM insecttable WHERE insectName LIKE '%$searchq%'";
$sql1 = "SELECT * FROM butterflytable WHERE butterflyName LIKE '%$searchq%'";
$sql2 = "SELECT * FROM birdtable WHERE birdName LIKE '%$searchq%'";
}

// Tests if the code been inserted
if ($conn->query($sql && $sql1 &&sql2)=== TRUE){
echo "The rows you have searched for are:";
} else {
echo "Connection failed: ";
echo $conn->error;
}

// Show fields
$result = $conn->query($sql && $sql1 &&sql2);

// Output data of each row
if ($result-> num_rows> 0) {
readfile("ViewReturn.html");
while($row = $result-> fetch_assoc()) {
// echo "ID: ".$row["id"]. "<br>";
echo "Insect: ".$row["insectName"]. "<br><br>";
echo "Bird: ".$row["birdName"]. "<br><br>";
echo "Butterfly: ".$row["butterflyName"]. "<br><br>";
}
} else {
echo "0 results";
}

我删除了一些不影响我的问题的代码,例如建立连接等。

目前,我不知道如何按顺序返回值,而且我严重困在从一个查询中搜索多个表。我看过“连接”,但我真的不了解它们。

如您所知,我不太擅长 PHP,我希望我能尽快摆脱它。我在程序的这一部分完全不成功,我正在寻求帮助和批评。我知道有很多问题要问,但我真的被困住了,谢谢。

最佳答案

您需要使用 UNION 运算符合并查询结果,确保在合并后对数据进行排序。这可能会影响性能,但希望您的结果集不会太大。

SELECT name  -- because we NEVER use select *
FROM
(
SELECT insectName AS name FROM InsectTable WHERE insectName LIKE '$searchq%'
UNION ALL
SELECT butterflyName AS name FROM ButterflyTable WHERE butterflyName LIKE '$searchq%'
UNION ALL
SELECT birdName AS name FROM BirdTable WHERE birdName LIKE '$searchq%'
)

此外,您可能需要考虑重新设计数据库。如果你的表中的项目都是相关的,那么它们实际上是一个父类(super class)。如果您用 Google 搜索“SQL 父类(super class)设计”,您应该能够为此找到一些很好的模式。

此外,通常不会在所有表名的末尾附加“表”一词。如果您的表包含有关昆虫的数据,那么它是“昆虫”或“昆虫”(我现在将忽略单数/复数辩论)。它是一张 table 这一事实已经不言而喻。

关于php - 从 HTML 表单中搜索多个 MySQL 表并按字母顺序返回数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34999231/

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