简体   繁体   English

SQL连接两个表以给出多数组结果

[英]SQL join two tables to give multi array result

I have 2 table events and categories . 我有2个表eventscategories categories table has 2 columns id and category . categories表具有2列idcategory The event table contains category_id as foreign key of categories table. event表包含category_id作为categories表的外键。

Now the content of events table is given by 现在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|
+------------------------------------------------------+

Now what I want to do is to select all rows and produce output in the form 现在,我要做的是选择所有行并以表格形式产生输出

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

How it can be done. 如何做到的。 I am using PHP and mysqli and I want to store this information in PHP array so that I could print it anywhere in page using PHP for loop or foreach 我正在使用PHPmysqli ,我想将此信息存储在PHP数组中,以便可以使用PHP for loop或foreach将其打印在页面的任何位置

Sort the query by category, event name 按类别,事件名称对查询进行排序

SELECT  categories.category,
        events.event_name

FROM categories

    LEFT JOIN events
    ON events.category_id = categories.id

ORDER BY categories.category, events.event_name

then iterate through the result to construct the multi-dimensional array you want: 然后遍历结果以构造所需的多维数组:

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

you can then perform a nested iteration something like this to output: 然后,您可以执行类似以下的嵌套迭代以输出:

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

    echo $category.'<br>';

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

}

Rather than using the event / category names as indexes for the multidimensional array, you could grab the event id and use that instead if the names aren't unique. 可以使用事件ID代替事件/类别名称作为多维数组的索引,而如果名称不是唯一的,则可以使用该ID。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM