【问题标题】:PHP generate a multidimensional array from mysql two tables [closed]PHP从mysql两个表生成一个多维数组[关闭]
【发布时间】:2016-12-07 02:57:16
【问题描述】:

我有两张桌子,matieressous_matieres

matieresidurltitle

sous_matieresidparenturltitle

urltitle 的小写版本

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

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

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

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

SQl 查询会是什么样子?以及如何从中生成数组?

【问题讨论】:

  • 你知道 SQL 连接吗?
  • 不,完全没有关于他们的事情。

标签: php mysql sql arrays multidimensional-array


【解决方案1】:

首先,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>";
    }
}

【讨论】:

  • 这确实是我正在寻找的,但这里的问题是我坚持将 SQL 查询转换为实际的表,因为我发布的只是一个简化的示例。我可以编辑我的原始帖子,而您只需为我重写 SQL 查询吗?谢谢。
  • 我或许能帮上忙。无论如何,如果您更新问题,我可以尝试一下。
  • 好的,请稍等,我换个方式问,把链接贴在这里。
  • @medk 已编辑以匹配您的新表信息。希望它仍然有意义。
  • 此答案中的代码使用 pdo 而不是 mysqli。如果您使用$stmt-&gt;fetch_object(),它也应该适用于 mysqli
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-10-28
  • 1970-01-01
  • 2012-04-21
  • 2011-02-04
  • 2016-02-10
  • 2011-07-17
相关资源
最近更新 更多