Bir başlık altında sonuç gruplama

2 Cevap php

Bu muhtemelen gerçekten açık ve basit - ama benim temel bilgi ile bana değil :)

İki tablo var:

table_items
-----------
item_id ¦ item_name ¦ item_describtion ¦ more item stuff.....

table_subitems
-----------------
subitem_id ¦ item_id ¦ subitem_name ¦ More subitem stuff

Her madde sıfır hemen hemen sınırsız subitems olabilir ve item_id alanları ile ilgilidir.

Ben madde ile gruplandırılmış subitems yazdırmak istiyorum.

Şu anda table_items.item_id = table_subitems.item_id subitems seçer ve o kadar gider gibi ince bir süre döngü, onları görüntüleyen bir sorgu ile bu yapıyorum, ben böyle bir şey olsun:

Item One
========
Subitem 0ne

Item One
========
Subitem two

Item One
========
Subitem three

Item Two
========
Subitem one

Item Three
==========
Subitem one

Item Three
==========

 Subitem two

Ama ben istiyorum

ITEM ONE
--------
Subitem one
Subitem two
Subitem three

ITEM TWO
--------
Subitem one

ITEM THREE
----------
Subitem one
Subitem two

Bunu nasıl yaparsınız? Bu sorgu ya da sonuçlarını göstermek nasıl bir işlevi var mı?

PHP bilgim büyüyen ama yine de sınırlı, ve ben bir usul şekilde yapıyorum (yani ben kavramaya çalışıyorum cepten değil, ama tam olarak değil) Ben aptal değilim gibi pek konuş benimle.

2 Cevap

Son başlığı tutan bir değişken kullanın ve son farklıysa sadece başlığı akımı yazdırın:

$last = null;
while ( /* … */ ) {
    if ($row['item_id'] != $last) {
        echo '<hx>'.$row['item_name'].'</hx>';
        $last = $row['item_id'];
    }
    echo $row['subitem_name'];
}

Yeni bir öğe adı değiştiğinde her zaman baskı, böyle bir şey yapabilirsiniz:

$last_item_id = null;

foreach ($rows as $row) {
    if ($row->item_id != $last_item_id) {
        echo "<h2>{$row->item_name}</h2>\n";
        $last_item_id = $row->item_id;
    }

    echo "{$row->subitem_name}<br />\n";
}