Php 如何按字母在单独的无序列表中显示mysql结果

Php 如何按字母在单独的无序列表中显示mysql结果,php,html,mysql,Php,Html,Mysql,我有一个查询子页面链接列表的网页。子页面按字母表划分,并格式化为动态嵌套无序列表,每个字母都有自己的标题。我目前正在使用它,但有26个单独的查询。我也想做同样的事情,但是只需要1个查询,而不是26个查询。这里是我现在所拥有的一个片段,只显示字母a和B。我对PHP相当陌生,所以任何想法都将不胜感激。我已经仔细研究过了,但是没有找到任何允许嵌套无序列表格式的答案,或者任何类似的答案 <ul class="navMenu"> <?php $servername =

我有一个查询子页面链接列表的网页。子页面按字母表划分,并格式化为动态嵌套无序列表,每个字母都有自己的标题。我目前正在使用它,但有26个单独的查询。我也想做同样的事情,但是只需要1个查询,而不是26个查询。这里是我现在所拥有的一个片段,只显示字母a和B。我对PHP相当陌生,所以任何想法都将不胜感激。我已经仔细研究过了,但是没有找到任何允许嵌套无序列表格式的答案,或者任何类似的答案

<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>