Temel PHP MySQL dizi gruplama soru

4 Cevap php

Ben yaptığım gibi PHP / MySQL en ilkel bilgi üzerinde bir şey olan biri için çok kolay bir çözüm olduğunu düşünüyorum hızlı soru.

Ben şehir, eyalet ve diğer bazı değişkenler ile bir veritabanında saklanan devletler çeşitli şehirlerin bir listesi var. Şimdi onlar şehir adlarına göre sıralanmış bir liste olarak çekti olsun:

  • Demirleme, AK
  • Baltimore, MD
  • Chicago, IL vs vs.

Ben devlet değere sahip tüm şehirler listesi ardından, ilk olarak devlet tarafından gruba edebilmek istiyorum. Yani gibi bakmak istiyorum:

AK

  • Demirleme
  • Juneau

CA

  • Los Angeles
  • San Diego
  • San Francisco
  • vs vs

Ben foreach çeşit yapmak gerekir ve çevrimiçi arandı, ama ben işe alabilirim bir örnek bulamadım biliyorum.

Burada temel listesi çekmek ne var:

  $list = mysql_query("SELECT id, alphaname, state FROM regional ORDER BY alphaname",$db);

while ($thearray = mysql_fetch_array($list)) {
  echo "<li><a href='info.html?id=$thearray[id]'>$thearray[alphaname], $thearray[state]</a></li>";
  } 

Ben bunu biliyorum tek gerçek yolu ağrı ve tamamen aptalca olurdu, her devlet için bir sorgu çalıştırmak olacaktır ...

Herhangi bir yardım için teşekkür ederiz!

Update - çözüldü. Ig de çalıştı ama ben rockacola yaklaşımı ile gitti.

4 Cevap

Bu deneyin ..

Şehre göre ilk o zaman devlet tarafından devlet, sipariş ile tüm şehir sorgula:

SELECT id, alphaname, state 
FROM regional 
ORDER BY state ASC, alphaname ASC

2 boyut diziye dataset düzenleyin:

$states = array();
while($thearray = mysql_fetch_array($list)) 
{
    $states[$thearray[state]][$thearray[id]] = $thearray[alphaname];
} 

Şimdi içeriği $states gibi görünmelidir:

Array
(
    [AK] => Array (
        [id_1] = Anchorage
        [id_2] = Juneau
    )
    [CA] => Array (
        [id_3] = Los Angeles
        [id_4] = San Diego
        [id_5] = San Francisco
    )
)

HTML sunum oluşturmak:

NOTE: Add anchor to reflect proposed question.

foreach($states as $state_name => $cities)
{
    echo '<h3>'.$state_name.'</h3>';
    echo '<ul>';
    foreach($cities as $id => $city_name)
    {
        echo '<li><a href="info.html?id='.$id.'">'.$city_name.'</a></li>';
    }
    echo '</ul>';
}

Kullanmak için SQL sorgusu güncelleyin:

ORDER BY state, alphaname

: Bu gibi veritabanı iade sonuçları yapacak

state   city
------------------
AK      Anchorage
AK      Juneau

... Bir örnek amaçları için SELECT state, alphaname AS city ile varsayarak.

Sunum PHP ele alınması gerekir:

//Please excuse my hideous attempt at PHP.  Better to think of it as Psuedo code
while ($thearray = mysql_fetch_array($list)) {
  echo $thearray[state]
  echo "<li><a href='info.html?id=$thearray[id]'>$thearray[alphaname]</a></li>";
}

... Ya i-g 's sonrası bakmak olabilir.

Devlet tarafından sırala tüm satırlar. Sonra, sırayla tüm satırları hareket. İlk satırda, ve size çıkış şehir ismi daha önce önceki satıra, çıkış devlet adı daha farklı bir devlet olan herhangi bir satırda.

SQL fazla 2 boyutlu verileri dönmeyecektir. Ne istediğiniz Pivot sütunun çeşit elde etmektir. Senin sorunun cevabı tüm satırlarını için:

SELECT * FROM regional ORDER BY state;

Sonra sıralamak ve PHP (veya seçtiğiniz dili) kullanarak grubu, ama hiçbir SQL.