У меня есть запрос, который получает все записи, упорядоченные по 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 ........
Надеюсь, это поможет кому-то.