2016-04-06 70 views
0

我有2個表eventscategoriescategories表有2列idcategoryevent表包含category_id作爲categories表的外鍵。SQL連接兩個表來給出多個數組的結果

現在events表的內容是由

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

給現在我想要做的是選擇所有行和形式

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

如何是可以做到的產生輸出。我使用PHPmysqli,我想在PHP中數組此信息,以便我可以在任何地方在網頁使用PHP for循環或foreach

+0

[用mysqli你必須手動排序記錄,而PDO是一行](https://phpdelusions.net/pdo/mysqli_comparison#array),所以選擇是你的。 –

回答

2

按類別排序的查詢,事件名稱

SELECT categories.category, 
     events.event_name 

FROM categories 

    LEFT JOIN events 
    ON events.category_id = categories.id 

ORDER BY categories.category, events.event_name 

打印然後通過遍歷結果以構建所需的多維數組:

$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']; 
} 

就可以執行一個嵌套迭代像這樣輸出:

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

    echo $category.'<br>'; 

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

} 

而不是使用事件/類別名稱爲指標的多維數組,你可以抓住事件ID並使用它,如果該名稱不是唯一的。

+0

非常感謝。這是我想要的。但有一個小問題。最後一個循環foreach($ evets as $ event){echo'<>'。$ event。'
'; }'只打印'<> Array'而不是數組元素 –

+0

我已經從第二個代碼中移除了'[skills]',現在它按預期工作。謝謝 –

+0

請看最新的問題。我不得不添加一個'event_date'到'events'表。現在我怎麼能在foreach循環中顯示每個事件的'event date'。我已經添加了'$ data ['category']] [$ row ['event_date']] = $ row ['event_date'];'在$ row ['event_name']之下'' –