2011-07-20 13 views
5

私はすべてのレコードをlast_nameで並べ替えたクエリを取得しています。今私は、すなわち名前の最初の文字にグループ化されたPHPの結果

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

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

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

おかげでループを作成し、そのグループの最後の名前の最初の文字によって、これらの結果を、グループの上に文字を表示したいと思います!クエリで

答えて

9

注文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"; 
} 

?> 
+0

$ initial!== strtoupper(substr($ rec ['lastname']、0、1) –

0

は、のようなものを追加してみてください:

group by substr(last_name,1,1) 

すなわち

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

これは最初の文字ごとに単一のレコードを返します – Quassnoi

+0

Quassnoiが正しいです。代わりに 'ORDER BY LEFT(last_name、1)ASC'を使用してください。 Btw ..あなたはすべての行を照会したいので、そのような 'ブロックされた'結果を取得することはできません。最後に、コード内で最後の「ブロック」を行う必要があります。 – Marco

4
$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 
+0

[php concatによる[mysql group]と同じ問題と解決策(http://stackoverflow.com/questions/6719061/mysql-group-by-php-concat/6719354#6719354) – knittl

2

をレコードをループして分割します:

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

出回っはこのような何かを試してみましたか?

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

私は書いていますずっと遅い!:D – Marco

0

はい、あなたが期待通りにリストをするつもり私の場合のBRAND_NAMEで自身

MySqlを使用して、これをachiveすることができます。

例:

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 
    ........ 

は、それが誰かを助けることを願っています。

関連する問題