我有一個查詢,它獲取由last_name排序的所有記錄。現在,我想創建一個循環,團體,這些結果進行姓氏的第一個字母,顯示該組以上的字母,即在名字的第一個字母組上的PHP結果
A
-----------
Albert
Alfred
C
-----------
Charles
D
-----------
Delta etc...
謝謝!
我有一個查詢,它獲取由last_name排序的所有記錄。現在,我想創建一個循環,團體,這些結果進行姓氏的第一個字母,顯示該組以上的字母,即在名字的第一個字母組上的PHP結果
A
-----------
Albert
Alfred
C
-----------
Charles
D
-----------
Delta etc...
謝謝!
訂單上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";
}
?>
$letter = null;
foreach ($array as $word) {
if ($letter != $word[0]) {
$letter = $word[0];
echo '<b>'.strtoupper($word[0]) . '</b><br/>';
}
echo strtoupper($word) . '<br/>';
}
,並遊覽查詢添加一行:
order by `your_field` asc
相同的問題和解決方案在[MySQL組由php concat](http://stackoverflow.com/questions/6719061/mysql-group-by-php-concat/6719354#6719354) – knittl
在你看來,你可能然後循環記錄並將它們分開:
$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 />';
}
已歷經嘗試這樣的事情?
$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'];
}
令人印象深刻!太慢了!:D – Marco
是的,你可以使用MySql
本身
在我的情況BRAND_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
........
希望它會幫助別人。
這一個工作...在改變後$ initial!== strtoupper(substr($ rec ['lastname'],1,1)to $ initial!== strtoupper(substr($ rec ['lastname'],0,1) –