2016-09-24 2 views
0

Я пробовал GROUP BY с моими данными ниже, но он возвращает только одну подтему. Как я могу вернуть все подтемы и упорядочить их по каждой теме без имени topic_name, появляющегося с каждым именем subtopic_name.Как я могу сгруппировать подтемы в темы в этом заявлении MySQL?

Edit:Включено скриншот страницы и вот 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> 

MySql statement looking for the topic name and sub topic name in a table. Needs distinct values. MySql statement looking for the topic name and sub topic name in a table. Organised by the topic and looking for distinct values. List of topics and subtopics displayed on the page with PHP

+0

Так как же результат выглядит? –

+0

Это то, что вы могли бы сделать лучше всего в своем клиенте (например, php). – Solarflare

+0

Добавлен PHP, @Solarflare. Я добавил еще один снимок экрана. Я хочу, чтобы он показывал генералу только один раз с подтемами в списке под темой. –

ответ

1

Вы можете использовать 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>'; 
} 
+0

Вы знаете, что было бы лучшим решением для изменения PHP в этом случае для группировки подтемов? –

+0

Знаете ли вы, как я мог бы изменить это, чтобы остановиться на 5 подтемах, а затем еще 5 около первой колонки? Я использую Bootstrap для столбцов. –

+0

@red_bairn Вы должны задать новый вопрос с тегом bootstrap. Или найдите решение для SO. –

Смежные вопросы