php - 我必须在目录列表页面组中按 A-Z 执行 26 次 mysql 查询吗?

标签 php mysql html

我想为我的网站制作一个目录列表页面。该页面显示我的所有站点文章。这些文章按标题的第一个字母分组。

我必须运行 26 次 mysql 查询吗

mysql query like "SELECT * FROM articles Where title like 'a%'"
mysql query like "SELECT * FROM articles Where title like 'b%'"
mysql query like "SELECT * FROM articles Where title like 'c%'"
...
mysql query like "SELECT * FROM articles Where title like 'z%'"

我的 html 输出是:

<div class="content">
   <p>A</p>
   <a href="somelink">Anhui</a>
   <a href="somelink">Aomen</a>
</div>
<div class="content">
   <p>B</p>
   <a href="somelink">Beijing</a>
</div>
<div class="content">
   <p>C</p>
   <a href="somelink">Chongqing</a>
</div>
...
<div class="content">
   <p>Z</p>
   <a href="somelink">Zhejiang</a>
</div>

那么有什么好的建议可以让我少做 mysql 查询并获得相同的结果吗?谢谢。

最佳答案

没有。进行单个查询,并按字母顺序对它们进行排序,如下所示:

SELECT * FROM articles ORDER BY title ASC

然后,当您循环浏览它们以显示它们时,请跟踪您显示的最后一篇文章。如果当前文章的第一个字母与最后一个不同,请分开。

$prevFirstLetter = '';
while($data = nextResult()) {
    $firstLetter = substr($data['title'], 0, 1);
    if ($firstLetter != $prevFirstLetter)
        echo "<h1>$firstLetter</h1>";
    echo "{$data['title']}<br>";
    $prevFirstLetter = $firstLetter;
}

关于php - 我必须在目录列表页面组中按 A-Z 执行 26 次 mysql 查询吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8582417/

相关文章:

PHP/ Apache : Permission settings for uploaded JPEG image files not correct

mysql - 在 MySQL 中创建运行差异列

使用 LEFT JOIN 优化 MySql 查询

javascript - 使用 POST 请求在 PHP 中查询 "SELECT * FROM .... WHERE ..."

php - 如何翻译 symfony 表单错误消息?

PHP 表单验证

PHP:逐行解析数据库中的文本

javascript - 如何删除和清除所有 localStorage 数据

html - 多个下拉菜单,子菜单消失

javascript - 鼠标悬停滑动菜单