2016-04-19 4 views
0

Я пытаюсь отобразить результаты в категории на основе id. Я получаю информацию из базы данных, но она снова создает заголовок категории.Группировка результатов из базы данных

Например:

название категории демо кот 1
тему 1 кот 1

название категории демо кот 1
тему 2 кошки 1

название категории демо кот 2
тема 3 cat 2

Когда он должен показать:

название категории демонстрационной кот 1
тему 1 кот 1

тема 2 кошки 1

название категории демо кот 2
тему 3 кошки 2

<table class="table table-bordered table-hover"> 
    <?php 

$sql = "SELECT * FROM forums, forum_categories WHERE forum_categories.cat_id = forums.cat_id ORDER BY forum_categories.cat_id"; 
$result = query($sql); 

while (($row = mysqli_fetch_assoc($result)) != false) { 

    $cat_id = $row['cat_id'];  
    $cat_title = $row['cat_title']; 

    echo "<thead>"; 
      echo "<tr>"; 
       echo "<th colspan='4'>$cat_title</th>"; 
      "</tr>"; 
     echo "</thead>"; 
     echo "<tbody>"; 


    $forums_cat_id = $row['cat_id']; 
    $forum_name = $row['forum_name']; 
    $forum_desc = $row['forum_desc']; 
    $forum_last_post_id = $row['forum_last_post_id']; 

    echo "<tr>"; 

    echo "<td>$forums_cat_id</td>"; 
    echo "<td>$forum_name<br>$forum_desc<br>Admin</td>"; 
    echo "<td>0</td>"; 
    echo "<td>0</td>"; 
    echo "</tr>"; 
} 

?> 
    </tbody> 
</table> 
+0

затем отслеживать, какой заголовок уже выведен, и выводить только новый заголовок, когда что-то меняется. например '$ prev = null; while (...) {if ($ prev! = $ cur) {output $ cur; $ prev = $ cur; }} ' –

+0

Marc B благодарю вас за вашу помощь. Я довольно новичок в php, вы можете мне это объяснить? –

ответ

0

Вы печатаете заголовок для каждого результата, возвращаемого MySQL для каждой строки. Таким образом, вы не различаете, когда обнаруживается «новая» категория. Это можно сделать достаточно просто, создав временную переменную, подобную массиву. Например:

$displayedCategories = array(); 

while (($row = mysqli_fetch_assoc($result)) != false) { 
    if (!in_array($row['cat_id'], $displayedCategories)) { 
     // This is a new category, display it and save it in $displayedCategories 
     $displayedCategories[] = $row['cat_id']; 
     echo "<thead>"; 
     echo "<tr>"; 
     echo "<th colspan='4'>$cat_title</th>"; 
     echo "</tr>"; 
     echo "</thead>"; 
    } 

    // Do the other stuff here... 
} 

Таким образом, любая «новая» категория, которая не встречается заголовок печатается один раз, а категория идентификатор сохраняется в $displayedCategories массив. Если одна и та же категория встречается снова, заголовок не будет выводиться снова.

+1

Oldskool Я ценю тот факт, что вы мне это объясняете, а не просто отправляете код. –

0
<table class="table table-bordered table-hover"><tbody> 
    <?php 

    $sql = "SELECT * FROM forums, forum_categories WHERE forum_categories.cat_id = forums.cat_id ORDER BY forum_categories.cat_id"; 
    $result = query($sql); 
    $cur_cat = ''; 
    while (($row = mysqli_fetch_assoc($result)) != false) { 

     $cat_id = $row['cat_id'];  
     $cat_title = $row['cat_title']; 

     if($cat_title != $cur_cat) { 
      echo "<thead>"; 
       echo "<tr>"; 
        echo "<th colspan='4'>$cat_title</th>"; 
       "</tr>"; 
      echo "</thead>"; 
      $cur_cat = $cat_title; 
     } 


     $forums_cat_id = $row['cat_id']; 
     $forum_name = $row['forum_name']; 
     $forum_desc = $row['forum_desc']; 
     $forum_last_post_id = $row['forum_last_post_id']; 

     echo "<tr>"; 

     echo "<td>$forums_cat_id</td>"; 
     echo "<td>$forum_name<br>$forum_desc<br>Admin</td>"; 
     echo "<td>0</td>"; 
     echo "<td>0</td>"; 
     echo "</tr>"; 
    } 

    ?> 
</tbody></table> 
Смежные вопросы