Php 如何按字母在单独的无序列表中显示mysql结果
我有一个查询子页面链接列表的网页。子页面按字母表划分,并格式化为动态嵌套无序列表,每个字母都有自己的标题。我目前正在使用它,但有26个单独的查询。我也想做同样的事情,但是只需要1个查询,而不是26个查询。这里是我现在所拥有的一个片段,只显示字母a和B。我对PHP相当陌生,所以任何想法都将不胜感激。我已经仔细研究过了,但是没有找到任何允许嵌套无序列表格式的答案,或者任何类似的答案Php 如何按字母在单独的无序列表中显示mysql结果,php,html,mysql,Php,Html,Mysql,我有一个查询子页面链接列表的网页。子页面按字母表划分,并格式化为动态嵌套无序列表,每个字母都有自己的标题。我目前正在使用它,但有26个单独的查询。我也想做同样的事情,但是只需要1个查询,而不是26个查询。这里是我现在所拥有的一个片段,只显示字母a和B。我对PHP相当陌生,所以任何想法都将不胜感激。我已经仔细研究过了,但是没有找到任何允许嵌套无序列表格式的答案,或者任何类似的答案 <ul class="navMenu"> <?php $servername =
<ul class="navMenu">
<?php
$servername = "XXX";
$username = "XXX";
$password = "XXX";
$dbname = "XXX";
// Create connection
$conn = new mysqli($servername, $username, $password, $dbname);
// Check connection
if ($conn->connect_error) {
die("Connection failed: " . $conn->connect_error);
}
$sql = "SELECT * FROM addsor WHERE title LIKE 'A%'";
$result = $conn->query($sql);
if ($result->num_rows > 0) {
echo "<li class='navMenuItem'>A";
echo "<ul class='navSubMenu'>";
while($row = $result->fetch_assoc()) {
$title = $row["title"];
$linkname = $row["linkname"];
echo "<li class='navSubMenuItem'><a href='addsor_result.php?sortitle=$linkname' onclick='popsor(this.href); return false;'>$title</a></li>";
}
echo "</ul>";
echo "</li>";
}
$sql = "SELECT * FROM addsor WHERE title LIKE 'B%'";
$result = $conn->query($sql);
if ($result->num_rows > 0) {
echo "<li class='navMenuItem'>B";
echo "<ul class='navSubMenu'>";
while($row = $result->fetch_assoc()) {
$title = $row["title"];
$linkname = $row["linkname"];
echo "<li class='navSubMenuItem'><a href='addsor_result.php?sortitle=$linkname' onclick='popsor(this.href); return false;'>$title</a></li>";
};
echo "</ul>";
echo "</li>";
};
?>
</ul>
我认为应该使用if语句而不是重复查询
$sql = "SELECT * FROM addsor";
$result = $conn->query($sql);
if ($result->num_rows > 0) {
while($row = $result->fetch_assoc()) {
$find = substr( $row["title"], 0, 1 );
if($find === "A") {
// add your code here
}
};
};
我的测试示例
$arr = ["Aaa","Aab","Aac","Baa","Bab","Bac"];
foreach($arr as $val) {
$find = substr($val, 0, 1);
if($find == "A") {
echo $val . "\r\n";
} elseif($find == "B") {
echo $val . "\r\n";
}
}
我得到了以下结果
run-project -l php
Aaa
Aab
Aac
Baa
Bab
Bac
我尝试了不同的方法,得到了我想要的结果。感谢所有提供帮助的人。以下是新代码:
<ul class="navMenu">
<?php
$servername = "XXX";
$username = "XXX";
$password = "XXX";
$dbname = "XXX";
// Create connection
$conn = new mysqli($servername, $username, $password, $dbname);
// Check connection
if ($conn->connect_error) {
die("Connection failed: " . $conn->connect_error);
}
$sql = "SELECT * FROM addsor";
$result = $conn->query($sql);
$firstletter = "";
if ($result->num_rows > 0) {
while($row = $result->fetch_assoc()) {
$title = $row["title"];
$linkname = $row["linkname"];
if (substr($row["title"], 0, 1) !== $firstletter) {
if (!empty($firstletter)) {echo "</li></ul>";}
$firstletter = substr($row["title"], 0, 1);
echo "<li class='navMenuItem'>".$firstletter."<ul class='navSubMenu'>";
}
echo "<li class='navSubMenuItem'><a href='addsor_result.php?sortitle=$linkname' onclick='popsor(this.href); return false;'>$title</a></li>\r\n";
};
};
$conn->close();
?>
</ul>
... 这应该是一个查询-页面加载瓶颈是与数据库的连接,您对一个
nav
重复26次。。。MySql很好,请阅读。不要杀死服务器select*from add或order by title
可能需要collate
您想要的是一个简单的单级控制中断。首先需要对数据进行正确排序,然后在循环过程中,将相关标准的值与您处理的上一条记录的值进行比较——根据它们是相同的还是不同的,您会做出相应的反应。这种方法对我很有效。问题是每个项目都有自己的标题。如果我有25个以A开头的项目,它会显示25个单独的列表,每个列表中有1个项目,每个项目嵌套在自己的标题下。我希望字母标题在每个嵌套项列表之前出现一次。您好,我可以查看您的数据吗,它在这里工作,这是我的测试数组[“Aaa”、“Aab”、“Aac”、“Baa”、“Bab”、“Bac”]使用foreach添加的示例
<ul class="navMenu">
<?php
$servername = "XXX";
$username = "XXX";
$password = "XXX";
$dbname = "XXX";
// Create connection
$conn = new mysqli($servername, $username, $password, $dbname);
// Check connection
if ($conn->connect_error) {
die("Connection failed: " . $conn->connect_error);
}
$sql = "SELECT * FROM addsor";
$result = $conn->query($sql);
$firstletter = "";
if ($result->num_rows > 0) {
while($row = $result->fetch_assoc()) {
$title = $row["title"];
$linkname = $row["linkname"];
if (substr($row["title"], 0, 1) !== $firstletter) {
if (!empty($firstletter)) {echo "</li></ul>";}
$firstletter = substr($row["title"], 0, 1);
echo "<li class='navMenuItem'>".$firstletter."<ul class='navSubMenu'>";
}
echo "<li class='navSubMenuItem'><a href='addsor_result.php?sortitle=$linkname' onclick='popsor(this.href); return false;'>$title</a></li>\r\n";
};
};
$conn->close();
?>
</ul>