繁体   English   中英

PHP或MySQL-如何仅显示同一值的多个表行

[英]PHP or MySQL - how to display only one table row out of many with the same value

我写了这个简单的代码,它输出存储在每个表行中的值的首字母(在这种情况下为公司名称):

include_once('db.php'); //connection with database

$result = mysql_query("SELECT distinct Name FROM companies ORDER BY Name");

while ($row = mysql_fetch_array($result)) {
$letter = substr($row[0], 0, 1);     
echo '<p><a href="#">' . $letter . '</a>/p>';
} 

companies表包含公司名称,而$letter变量包含这些名称的首字母。

显然,在公司表中,有许多以相同字母开头的名称。

现在,如何在许多字母“ A”,“ B”,“ C”等中仅显示一个字母“ A”,一个字母“ B”,一个字母“ C”等?

您为什么不将其放入查询本身?

修改查询为

SELECT distinct SUBSTRING(Name,1,1) FROM company ORDER BY SUBSTRING(Name,1,1)

这是SQL小提琴

要在PHP中执行此操作,您可以创建一个空白数组,并将每个公司的首字母推入该数组(如果尚不存在),如下所示:

include_once('db.php'); //connection with database

$result = mysql_query("SELECT distinct Name FROM companies ORDER BY Name");

$letters = array();

while ($row = mysql_fetch_array($result)) {
    if(!in_array(substr($row[0], 0, 1), $letters)){
        array_push($letters, substr($row[0], 0, 1));
    }    
} 

foreach($letters as $l){
    echo '<p><a href="#">' . $l . '</a></p>';
}

如果即使一家公司并非以该字母开头,也要显示所有字母,那么可以使用如下所示的PHP range函数:

foreach (range('a', 'z') as $letter) {
    echo '<p><a href="#">' . $letter . '</a></p>';
}

使用此SQL语句

SELECT DISTINCT SUBSTR(Name,1,1) FROM companies ORDER BY Name;

这将返回名称的首字母不同的值;

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM