我想将我们数据库中的企业显示为按字母顺序排列的列表,按首字母排序。目前,并不是所有的字母都有代表。作为一个可视化示例,用户页面将如下所示:
按名称显示业务 -
| A | C | F | G | H | L | ...
(而上面的每个字母都会显示以该字母开头的企业。)
但是,我很难在php页面上显示'first letters'的mysql查询结果。
要生成结果作为查询,我有以下行:
$result4 = mysqli_query($conn,"SELECT DISTINCT LEFT('bname', 1) FROM 'bisEntry');
(这来自Returning the DISTINCT first character of a field (MySQL))
然后,为了在页面上显示每个业务的“首字母”,我尝试了以下方法:
while ($row = mysqli_fetch_array($result4, MYSQLI_ASSOC)) {
echo "| ". $row['bname'] ." ";
}
对于第一个示例,数组正确地“计算”不同的首字母并显示:
按名称显示业务 -
| | | | | | | ...
但是,实际的字母没有显示。我挂断了如何将数组的结果转换为将要显示的实际字母。
我试过了……
while($row = mysqli_fetch_array($result4))
{
foreach ($row['category'] as $name) {
echo "| ". $name;
}
但是,这返回了错误
foreach() argument must be of type array|object
这让我相信我实际上没有正确创建数组。
我确定解决方案就在我的鼻子里,但我就是无法解开它。感谢您的帮助。
那是因为你没有直接选择列
bname
,所以列名变成了LEFT('bname', 1)
(例如[["LEFT('bname', 1)" => 'A'], ["LEFT('bname', 1)" => 'C']]
)。添加别名作为列名:
$result4 = mysqli_query($conn, "SELECT DISTINCT LEFT('bname', 1) AS bname FROM bisEntry");
您始终可以使用 xDebug 或简单地调试变量中返回的内容
var_dump($row);
自从 (PHP 8 >= 8.1.0) 以来,当您只需要从查询结果中获取一列时,您可以在下一种方式中使用
mysqli_fetch_column
:
<?php
$conn = &$mysqli;
$result4 = mysqli_query($conn,"SELECT DISTINCT LEFT(`bname`, 1) FROM `bisEntry`");
while ($letter = mysqli_fetch_column($result4, 0)) {
echo "| ". $letter ." ";
}