PHP或MySQL - 如何只显示具有相同值的多个表行

时间:2014-01-02 10:56:46

标签: php mysql

我编写了这个简单的代码,它输出存储在每个表行中的第一个值字母(在本例中为公司名称):     

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>';
} 

公司表包含公司名称,$letter变量包含这些名称的第一个字母。

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

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

3 个答案:

答案 0 :(得分:4)

为什么不把它放在查询本身?

将查询修改为

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

这是sql fiddle

答案 1 :(得分:0)

要在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范围函数:

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

答案 2 :(得分:0)

使用此SQL语句

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

这将从名字的第一个字母返回不同的值;