2011-07-20 11 views
5

Son kayıtlara göre sıralanmış tüm kayıtları içeren bir sorgum var. Şimdi yaniGrup İlk harf adında PHP sonuçları

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

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

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

Teşekkür bir döngü oluşturmak olduğunu grupları soyadının ilk harfine göre bu sonuçları ve grubunun üstünde mektup görüntülemek istiyorum! Sorgununuzdaki

cevap

9

Sipariş MySQL tarafta lastname tarafından sonuçları ve PHP tarafındaki ilk harfin değişiklik izlemek:

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

Bu bir değişiklikten sonra ... çalıştı $ başlangıç! == strtoupper (substr ($ rec ['isim'], 1, 1) $ başlangıç! == strtoupper (substr ($ rec ['isim'], 0, 1) –

0

, böyle bir şey eklemeyi deneyin:

group by substr(last_name,1,1) 

yani

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

Bu sadece – Quassnoi

+0

numaralı Quassnoi harflerinin her biri için tek bir kayıt döndürecektir. Bunun yerine 'ORDER BY SOL (last_name, 1) ASC' kullanın. Btw .. Tüm satırları sorgulamak istediğiniz sürece, bu tür 'engellenmiş' sonuçları alamayacaksınız. Sonunda kodunuzdaki son 'engellemeyi' yapmak zorunda kalacaksınız. – 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/>'; 
} 

ve sorgu eklenti hattını turu için: Eğer verebilecektir görünümünde

order by `your_field` asc 
+0

aynı sorun ve çözüm [mysql group by php concat] (http://stackoverflow.com/questions/6719061/mysql-group-by-php-concat/6719354#6719354) – knittl

2

daha sonra kayıtları döngü ve onları bölünmüş:

$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

Allready böyle bir şey denedi?

$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

Vay etkileyici! Yazarım! çok yavaş!: D – Marco

0

Evet sen beklendiği gibi listesini olacak dosyamın BRAND_NAME olarak kendisi

MySql kullanarak bu elde edilememektedir.

Örnek:

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 

Sonuç:

A 
    A Card 
    A Cef 
    A Cef O 
    B 
    Bacticef Tab 
    Bacticin 
    Bactidrox 
    Bactidrox Kid 
    ........ 

Birini yardımcı olacaktır Umut.