我有 2 个表事件
和类别
。 categories
表有 2 列 id
和 category
。 event
表包含 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
如何做到这一点。我正在使用 PHP
和 mysqli
并且我想将此信息存储在 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 并在名称不唯一时使用它,而不是使用事件/类别名称作为多维数组的索引。
关于php - SQL 连接两个表以给出多数组结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36458593/