2016-04-20 3 views
2

У меня есть 2 таблицы называются форумы и forum_categories в базеWhile Loop вторит только 1 значение дважды

forum_categories
cat_id

форум
cat_id

Я пытаюсь сосчитать общее количество для каждой категории по какой-либо причине отображает общую запись для всех записей.

У меня есть 2 категории до сих пор в базе данных

первая категория имеет значение 1
второй категории имеет значение 2

В первой категории, у меня есть два форумы, у которых есть cat_id 1
В категории 2 у меня есть один форум, на котором есть cat_id из 2

отображает

категории 1 -------------------- 3 ---------------
категории 2 -------------------- 3 ---------------

, когда он должен отображать

категория 1 -------------------- 2 ---------------
категория 2 --- ----------------- 1 ---------------

$ topics_count всегда отображает 3.

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



$sql2 = "SELECT fc.cat_title COUNT(f.forum_id) FROM forums as f LEFT JOIN forum_categories fc ON (f.cat_id = fc.cat_id) GROUP BY f.cat_id"; 
$result2 = query($sql2); 
$topics_count = count($result2); 



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

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


    echo "<tr>"; 

    echo "<td>$cat_id</td>"; 
    echo "<td><a href='viewforum.php?f={$cat_id}'>$cat_title</a><br>$forum_name admin</td>"; 
    echo "<td>$topics_count</td>"; 
    echo "<td>0</td>"; 
    echo "</tr>"; 
} 
+0

Можете ли вы показать нам данные таблицы? –

+0

Я не верю, что вы должны получить 6 записей из вашего запроса. Должно быть только 3. –

+0

Это проблема PHP. Вы просто печатаете результирующий набор дважды. –

ответ

2

попробовать это

заменить этот

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

с этим

while ($row = mysqli_fetch_assoc($result)) { 
+0

, который работал, это был кошмар –

3

Этот бит кода ниже дает все результаты:

$sql2 = "SELECT * FROM forums WHERE cat_id = cat_id"; 
$result2 = query($sql2); 
$topics_count = row_count($result2); // here this would be 3* 

* в случае 2 для cat1 + 1 для CAT2 и вы эхо этого в каждой строке таблицы:

echo "<td>$topics_count</td>"; 

поэтому вы видите общее число (3) на обеих строках ,

То, что вы на самом деле пытаются это присоединитьсяforums и forum_categories стол, получить forum_categories.cat_title и COUNT(forums.cat_id) в то время как группировка результатов по forums.cat_id

SELECT 
    fc.cat_title, 
    COUNT(f.forum_id) 
FROM forums as f 
LEFT JOIN forum_categories fc ON (f.cat_id = fc.cat_id) 
GROUP BY f.cat_id 

Здесь же демо fiddle я послал вам вчера.

Ваш запрос будет затем вернуть вам что-то вроде:

Demo Forum 1 | 2 
Demo Forum 2 | 1 

UPDATE:

$sql2 = "SELECT 
      fc.cat_id, 
      fc.cat_title, 
      f.forum_name, 
      COUNT(f.forum_id) as count 
     FROM forums as f 
     LEFT JOIN forum_categories fc ON (f.cat_id = fc.cat_id) 
     GROUP BY f.cat_id"; 

$result2 = query($sql2); 

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

    $cat_id = $row['cat_id']; // category id 
    $cat_title = $row['cat_title']; // category title 
    $forum_name = $row['forum_name']; // forum name 
    $count = $row['count']; // count of forum_id (grouped by cat_id) 

    echo "<tr>"; 
    echo "<td>$cat_id</td>"; 
    echo "<td><a href='viewforum.php?f={$cat_id}'>$cat_title</a><br>$forum_name admin</td>"; 
    echo "<td>$count</td>"; 
    echo "<td>0</td>"; 
    echo "</tr>"; 

} 

Вот, я уверен, что счетчик будет хорошо, но не уверен, что «Название форума» ,

+0

Практически так же, как и мой запрос, за исключением того, что у вас есть рабочий пример с SQLFiddle +1 – ash

+0

Right @ash, я попытался объяснить ему вчера, и у него было желание по-прежнему опубликовать этот ответ, если он теперь может понять лучше , В противном случае ваш уже решает проблему. – Ekin

+0

@ash просто показать, что я не сумасшедший Я обновил свой код, и результаты изменились с 3 во всех категориях на 1 во всех категориях –

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