我有两个表,matieres
和sous_matieres
matieres
具有id
、url
和title
sous_matieres
具有id
、parent
、url
、title
url
是title
的小写版本
parent
必须与matieres
表的列的url
相同,因此这两个表由matieres
的url
和sous_matieres
的parent
连接
如何使用JOINS编写mySQLi查询以获得二维数组
现在,我必须从matieres
创建面板(div,其中matiere
作为标题,sous_matieres
作为面板内的标签),并将sous_matieres
放在适当的面板内。
现在最好的选择是执行一两个查询,创建一个二维数组,然后对数组执行foreach循环。
对此的SQl查询会是什么样子?如何从中生成数组?
首先,查询中的JOIN
matieres
到sous_matieres
。
$stmt = $pdo->query('SELECT
m.id AS m_id, m.url AS m_url, m.title AS m_title,
s.id AS s_id, s.url AS s_url, s.title AS s_title
FROM matieres m
INNER JOIN sous_matieres s ON m.url = s.parent');
请注意,使用INNER JOIN
意味着您将无法获得没有关联sous_matieres的matieres,反之亦然。如果有您想要查看的内容,则需要使用外部联接。
然后,当您从查询结果中提取行时,将材料附加到它们相关的父关键字,如下所示:
while ($row = $stmt->fetchObject()) {
$matieres[$row->m_id]['url'] = $row->m_url;
$matieres[$row->m_id]['title'] = $row->m_title;
$matieres[$row->m_id]['sous_matieres'][$row->s_id] = $row;
}
您应该能够在生成的数组上循环以生成您想要的输出,如下所示(不完全是您想要的HTML,但应该足以演示这个想法):
foreach ($matieres as $m_id => $matiere) {
echo "<h2>$matiere[title]</h2>";
foreach ($matiere['sous_matieres'] as $id => $sm) {
echo "<div>
<a href='{$sm->s_url}'>{$sm->s_title}</a>
</div>";
}
}