Результаты группы PHP по первой букве имени

У меня есть запрос, который получает все записи, упорядоченные по last_name. Теперь я хотел бы создать цикл, который группирует эти результаты по первой букве фамилии и отображает букву над группой, т. Е.

A ----------- Albert Alfred C ----------- Charles D ----------- Delta etc... 

Благодаря!

Закажите результаты по имени на стороне MySQL и отслеживайте изменение первой буквы на стороне 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 

Все уже пробовали что-то вроде этого?

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

По вашему мнению, вы могли бы зацикливать записи и разделить их:

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

в вашем запросе, попробуйте добавить что-то вроде:

 group by substr(last_name,1,1) 

т.е.

 select substr(last_name,1,1) as alpha, * from tableName group by substr(last_name,1,1) 

Да, вы можете добиться этого, используя сам 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 ........ 

Надеюсь, это поможет кому-то.