根据名称的第一个字母对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
........