2016-08-01 94 views
0

我有两个表,matieressous_matieresPHP生成从MySQL两个表

matieresidurltitle

sous_matieresidparenturltitle

url是一个多维数组小写版本的title

parent必须是相同的matieres表的列url这样的两个表由matieresurlsous_matieres

parent加入了如何编写使用JOINS获得两个的mysqli查询维数组

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

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

SQl查询的内容是什么样的?以及如何生成它的数组?

+2

你知道SQL连接吗? – eggyal

+0

不,绝对没有关于他们。 – medk

回答

2

首先,JOINmatieressous_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反之亦然得到辅助材料。如果有任何你想看到的,你将需要使用外部连接。

然后,当你从查询结果中提取行,追加材料及其相关的父键是这样的:

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>"; 
    } 
} 
+0

这真的是我正在寻找的,但这里的问题是我坚持把SQL查询翻译成实际的表,因为我发布的只是一个简单的例子。我可以编辑我的原始文章,并且只需为我重写SQL查询?谢谢。 – medk

+1

我可以帮忙。无论如何,如果你更新这个问题,我可以尝试一下。 –

+0

好的,请稍候,我会以不同的方式提问,并在此处发布链接。 – medk