2016-04-06 15 views
0

2 tablo events ve categories var. categories tablosunda 2 sütun id ve category bulunur. event tablosu, categories tablonun yabancı anahtarı olarak category_id içerir.SQL çoklu dizi sonucu vermek için iki tabloya katılıyor

Şimdi events tablonun içeriği Şimdi ne yapmak istediğiniz tüm satırları seçin ve onu yapılabilir Nasıl formda

=> Category 1 
    <> event 1 
    <><> 12-04-2016 
    <> event 2 
    <><> 14-04-2016 
    <> event 3 
    <><> 14-04-2016 
=> Category 2 
    <> event 1 
    <><> 16-04-2016 
    <> event 2 
    <><> 12-04-2016 

yılında çıktı üretmektir

+------------------------------------------------------+ 
| id | category_id | event_name | event_date | created | 
+------------------------------------------------------+ 
| 1 |  1  | event 1 | 12-04-2016 |TIMESTAMP| 
| 2 |  1  | event 2 | 14-04-2016 |TIMESTAMP| 
| 3 |  2  | event 1 | 16-04-2016 |TIMESTAMP| 
| 4 |  1  | event 3 | 14-04-2016 |TIMESTAMP| 
| 5 |  2  | event 2 | 12-04-2016 |TIMESTAMP| 
+------------------------------------------------------+ 

tarafından verilir. Ben PHP ve mysqli kullanıyorum ve ben PHP for döngü veya foreach

+0

[Mysqli ile, PDO ile bir satır iken, el ile kayıtları sıralamanız gerekir] (https://phpdelusions.net/pdo/mysqli_comparison#array), bu yüzden seçim sizin. –

cevap

2

Sıralama kategoriye göre sorgu, etkinlik adını

SELECT categories.category, 
     events.event_name 

FROM categories 

    LEFT JOIN events 
    ON events.category_id = categories.id 

ORDER BY categories.category, events.event_name 

kullanarak sayfasında herhangi bir yere yazdırmak böylece PHP dizide bu bilgileri saklamak istiyor

$data = array(); 

foreach($results as $row){ 
    $data[$row['category']][$row['event_name']]['event_name'] = $row['event_name']; 
    $data[$row['category']][$row['event_name']]['event_date'] = $row['event_date']; 
} 

sonra çıkışa böyle bir iç içe yineleme şey yapabilir: o zaman istediğiniz çok boyutlu dizi oluşturmak için sonuç yinelemenize

foreach($data as $category => $events){ 

    echo $category.'<br>'; 

    foreach($events as $event){ 
     echo ' <> '.$event['event_name'].'<br>'; 
     echo '  <> '.$event['event_date'].'<br>'; 
    } 

} 
Aksine çok boyutlu dizi için endeksler olarak olay/kategori adlarını kullanmak yerine, adları benzersiz değildir yerine eğer olay kimliği ve kullanımını içeriz.

+0

Çok teşekkür ederim. İstediğim buydu. Ama küçük bir sorun var. Son döngü "foreach" ($ olayı $ olay olarak çağrılır) {echo '<>'. $ Olay. '
'; } 'sadece yazdırıyor <

+0

' Son 'ikinci koddan' '' '' '' '' –

+0

teşekkürler, lütfen güncellenen soruya bakın. Olaylar tablosuna bir tane daha sütun 'event_date 'eklemek zorunda kaldım. Şimdi, foreach döngüsündeki her etkinlikle birlikte "etkinlik tarihini" nasıl gösterebilirim? $ Data [$ row ['category']] ekledim [$ row ['event_date']] = $ row ['event_date']; '$ row ['event_name']' in hemen altında –