根据名称的第一个字母对PHP结果进行分组

根据名称的第一个字母对PHP结果进行分组,php,mysql,Php,Mysql,我有一个查询,它获取按姓氏排序的所有记录。现在我想创建一个循环,按照姓氏的第一个字母对这些结果进行分组,并在组上方显示字母,即 A ----------- Albert Alfred C ----------- Charles D ----------- Delta etc... 谢谢 在查询中,尝试添加以下内容: group by substr(last_name,1,1) i、 e 在您看来,您可以循环记录并将其拆分: $current = ''; foreach ($rows as

我有一个查询,它获取按姓氏排序的所有记录。现在我想创建一个循环,按照姓氏的第一个字母对这些结果进行分组,并在组上方显示字母,即

A
-----------
Albert
Alfred

C
-----------
Charles

D
-----------
Delta etc...

谢谢

在查询中,尝试添加以下内容:

group by substr(last_name,1,1)
i、 e


在您看来,您可以循环记录并将其拆分:

$current = '';
foreach ($rows as $r) {
    if (!$current || strtolower($r['name'][0]) != $current) {
        $current = strtolower($r['name'][0]);
        echo strtoupper($current).'<br />---------------';
    }
    echo $row['name'].'<br />';
}
$current='';
foreach($r行){
如果(!$current | | strtolower($r['name'][0])!=$current){
$current=strtolower($r['name'][0]);
echo strotupper($current)。“
--------------”; } echo$row['name']。
; }
MySQL
侧按
lastname
对结果排序,并在
PHP
侧跟踪第一个字母的变化:

<?php

$rs = mysql_query("SELECT * FROM mytable ORDER BY lastname");

while ($rec = mysql_fetch_assoc($rs)) {
    if ($initial !== strtoupper(substr($rec['lastname'], 0, 1)) {
        $initial = strtoupper(substr($rec['lastname'], 0, 1));
        print "$initial\n";
    }
    print $rec['lastname'] . "\n";
}

?>

Allready试过这样的东西吗

$last = '';
foreach($data as $key=>$row){
    if(substr($row['last_name'],0,1)!=$last) echo '<br /><br />'.substr($row['last_name'],0,1).'<br />----------------<br />';
    $last = substr($row['last_name'],0,1);
    echo $row['last_name'];
}
$last='';
foreach($key=>$row形式的数据){
if(substr($row['last\u name',0,1)!=$last)回显“

”。substr($row['last\u name',0,1)。”
------------------------
; $last=substr($row['last_name',],0,1); echo$row['last_name']; }
是的,您可以使用MySql本身实现这一点

在我的情况下,品牌名称将按照您的预期列出

例如:

SELECT id, upper(SUBSTR(brand_name, 1, 1))  AS alpha FROM products WHERE  brand_name != ''  group by alpha
UNION
SELECT id, upper(SUBSTR(brand_name, 1, 1))  AS alpha FROM products WHERE  brand_name != '' order by brand_name COLLATE NOCASE
结果:

    A
    A Card
    A Cef
    A Cef O
    B
    Bacticef Tab
    Bacticin
    Bactidrox
    Bactidrox Kid
    ........

希望它能帮助别人。

如果我是对的,这只会返回每个首字母的一条记录。改为使用左(姓1)ASC顺序。顺便提一下只要您想查询所有行,就无法检索此类“阻止”结果。最后,你将不得不在你的代码中做最后的“阻塞”。同样的问题和解决方案在魔兽世界中令人印象深刻!我写得太慢了!:D更改$initial后,此选项有效!==strtoupper(substr($rec['lastname'],1,1)到$initial!==strtoupper(substr($rec['lastname'],0,1)
$last = '';
foreach($data as $key=>$row){
    if(substr($row['last_name'],0,1)!=$last) echo '<br /><br />'.substr($row['last_name'],0,1).'<br />----------------<br />';
    $last = substr($row['last_name'],0,1);
    echo $row['last_name'];
}
SELECT id, upper(SUBSTR(brand_name, 1, 1))  AS alpha FROM products WHERE  brand_name != ''  group by alpha
UNION
SELECT id, upper(SUBSTR(brand_name, 1, 1))  AS alpha FROM products WHERE  brand_name != '' order by brand_name COLLATE NOCASE
    A
    A Card
    A Cef
    A Cef O
    B
    Bacticef Tab
    Bacticin
    Bactidrox
    Bactidrox Kid
    ........