PHP从mysql的两个表生成一个多维数组



我有两个表,matieressous_matieres

matieres具有idurltitle

sous_matieres具有idparenturltitle

urltitle 的小写版本

parent必须与matieres表的列的url相同,因此这两个表由matieresurlsous_matieresparent连接

如何使用JOINS编写mySQLi查询以获得二维数组

现在,我必须从matieres创建面板(div,其中matiere作为标题,sous_matieres作为面板内的标签),并将sous_matieres放在适当的面板内。

现在最好的选择是执行一两个查询,创建一个二维数组,然后对数组执行foreach循环。

对此的SQl查询会是什么样子?如何从中生成数组?

首先,查询中的JOIN matieressous_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>";
    }
}

相关内容

  • 没有找到相关文章

最新更新