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

萨维斯特

我有一个网页,查询子页面的链接列表。子页面按字母划分,并格式化为动态嵌套的无序列表,每个字母都有自己的标题。我目前可以使用,但是有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>

对于Jerson,我编辑了代码以使用if语句:

<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);
if ($result->num_rows > 0) {
  while($row = $result->fetch_assoc()) {
    $find = substr($row["title"], 0, 1);
    $title = $row["title"];
    $linkname = $row["linkname"];
    if ($find === "A") {
      echo "<li class='navMenuItem menu-header'>A";
      echo "<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";
      echo "</ul>";
      echo "</li>";
    }
    elseif ($find === "B") {
      echo "<li class='navMenuItem menu-header'>B";
      echo "<ul class='navSubMenu'>";
      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>

但是现在,它们不再像:
A
    Aaa
    Aab
    Aac
B
    Baa
    Bab
    Bac
那样分组了,而是

出现了:

A
    Aaa
A
    Aab
A
    Aac
B
    Baa
B
    Bab

萨维斯特

我尝试了一种不同的方法,并得到了想要的结果。感谢所有提供帮助的人。这是新的代码:

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

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章