SQL将两个表连接起来,得到多数组结果


SQL join two tables to give multi array result

我有两个表eventscategoriescategories表有两列idcategoryevent表包含category_id作为categories表的外键。

现在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 将其打印到页面中的任何位置

按类别、事件名称对查询进行排序

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,并在名称不唯一的情况下使用它,而不是使用事件/类别名称作为多维数组的索引。