PHP yalnızca bir kez tekrarlanan satır yankı

2 Cevap php

Ben 2 tablolar var. Bir tablo 'başlıkları' & olduğunu Başlıkları ve diğeri 'alt başlıkları' ve (& olmalıdır) başlıkları altında sınıflandırılır ve ilgili bir İlerleyişini olmalıdır Alt başlıklar ihtiva eder. Bir alt-başlık sadece bir başlık ve çok sayıda alt başlıklar aynı İlerleyişini olabilir olabilir. Yani şu biçimi göz önünde bulundurun:

--Table heading

heading_id heading
1           H1
2           H2
3           H3


--Table sub_heading

sub_head_id sub_heading heading_id
1           SH1             1
2           SH2             1
3           SH3             2
4           SH4             3
5           SH5             2
6           SH6             4

Ne yapmak istiyorum sadece bir kez veritabanını sorgulamak ve (? İç katılın kullanarak) ve çıkış sadece bir kez Başlık ve kendi başlığı altında listelenen tüm sub_headings liste tüm sub_headings ve bunlara karşılık gelen başlıklar olsun. Yani, pratikte, ben OUTPUT RESULT AS göstermek istiyorum:

H1
--SH1
--SH2

H2
--SH3
--SH5

H3
--SH4

H4
--SH6

Gördüğünüz gibi, Başlıklar sadece bir kez echo'ed ve bir başlığa ait tüm alt başlıklar güzel kendi başlığı altında gösterilmiştir. Yani ben bunu yazmak istiyorum ne sorgu bilmek istiyorum.

NOTE: Zaten heading_id almak için bir kod yazdım ve bir döngü içinde bunu yaparken, ilgili alt başlıklar için veritabanını sorgulamak. Bu da yine sub_headings arasında döngü ile sonuçlanır. Ama (ben hissediyorum) bu dezavantajı var her başlık için, DB en az bir kez kendi gelen sub_headings almak için sorgulanabilir olmasıdır. 50 Başlıklar varsa bir döngü onları getirilirken Yani, 2. bir sorgu alt başlıklarını almak için yapılır. Bu alt başlıkları almak ve bir döngü içinde bunları işlemek için ikinci bir sorgu yazmak için bana ihtiyacı var. Bunu önlemek istiyorum.

Herkes nasıl sadece bir kez DB sorgulamak ve çıkış yukarıda belirtildiği gibi sonuç bana söyleyebilir Yani eğer gerçekten yardımcı olacaktır. Şimdiden teşekkürler.

2 Cevap

$query = "SELECT
    h.heading,
    s.sub_heading 
FROM
    heading h
LEFT JOIN
    sub_heading s
ON
    h.id = s.heading_id
ORDER BY
    s.heading_id ASC,
    s.sub_head_id ASC";

$resource = mysql_query($query);

$previous_heading = false;

// This will print the headings in a unordered list, modify if needed
echo '<ul>';
while($resource = mysql_fetch_assoc($resource)) {
    if(!$previous_heading || $previous_heading != $resource['heading']) {
        if($previous_heading) {
            echo '</ul></li>';
        }
        echo '<li>'.$resource['heading'].'<ul>';
    }
    echo '<li>'.$resource['sub_heading'].'</li>';
    $previous_heading = $resource['heading'];
}
echo '</ul></ul>';

Gibi bir çıktısı şey

  • H1
    • SH1
    • SH2
  • H2
    • SH3
    • SH5
  • H3
    • SH4
  • H4
    • SH6
select * 
from heading h, subheading s 
where s.h = h.id 
order by h.title, s.title

sonucu üzerinde döngü ve heading_id değişiklikleri, çıkışı yeni bölüm