如何将子主题分组到此 MySQL 语句中的主题中?

How can I group subtopics into topics in this MySQL statement?

我已经尝试对下面的数据进行 GROUP BY,但它只返回一个子主题。我怎样才能 return 所有子主题并将它们组织在每个主题下而不 topic_name 出现在每个子 topic_name.

编辑: 包括页面截图,这里是使用的PHP:

            <ul class="topics-list">
            <?php
            foreach ($data as $key){
                foreach ($key as $item){ 
                    $topic_name = $item['topic_name'];
                    $subtopic_name = ucwords($item['subtopic_name']);
                ?>
                    <div class="the_topic">
                        <h2 class="topic_change"><?php echo $topic_name; ?></h2>
                        <ul><li class="subtopic_name"><a href="#"   data-toggle="modal" data-target="#lvlModal"><h3><?php echo $subtopic_name; ?></h3></a></li></ul>
                        <hr />
                    </div>
                <?php } ?>
            <?php } ?>
            </ul>

您可以使用 GROUP_CONCAT() 将所有子主题连接成每个主题一个字符串,然后在您的应用程序代码中解析该字符串。

SELECT topic_name, GROUP_CONCAT(subtopic_name DELIMITER '§§§') as subtopic_names
FROM questions2
GROUP BY topic_name

但我不建议这样做,因为如果子主题包含您的分隔符,您会遇到麻烦。我只想使用您的第二个查询并将结果分组到应用程序代码中。

PHP 代码看起来像这样:

// group the data
$groupedData = array();
foreach ($data as $item) {
    $topic_name = $item['topic_name'];
    $subtopic_name = ucwords($item['subtopic_name']);
    $groupedData[$topic_name][] = $subtopic_name;
}

// grouped output
foreach ($groupedData as $topic_name => $subtopic_names) {
    echo '<div class="the_topic">';
    echo '<h2 class="topic_change">' . $topic_name . '</h2><ul>';
    foreach ($subtopic_names as $subtopic_name) {
        echo '<li class="subtopic_name"><a href="#" data-toggle="modal" data-target="#lvlModal"><h3>';
        echo $subtopic_name;
        echo '</h3></a></li>';
    }
    echo '</ul><hr /></div>';
}