Перейти к содержимому


Выбрать шаблон и создать сайт

Посчитать количество статей в категории

#1 bo4kov

bo4kov
  • Пользователь
  • 26 сообщений
  • Репутация: 0
0

Отправлено 26 Май 2015 - 17:07

Здравствуйте! Все ломаю голову, как же посчитать количество статей в категории.

 

В общем есть функция которая считает количество статей в определенной категории:

function count_rows($category){ // $category - это id категории
    $query = "(SELECT COUNT(id) as count_rows FROM `articles` WHERE category=`$category`";
    $res = mysql_query($query);
    
    while($row = mysql_fetch_assoc($res)){
        if($row['count_rows']) $count_rows = $row['count_rows'];
    }
    return $count_rows;
}

Эта функция у меня на самом деле другая (немного посложнее запрос будет), не в этом суть. Данная функция работает, и считает мне количество статей в категории.

 

И есть код вывода категорий (и собственно с моим вариантом вывода количества статей):

<?php foreach($cat as $item): ?>
     $count = count_rows($item['id']);
     <li>
        <a href="#" >
            <?=$item['title']; ?>
    	    <div class="count"><?=$count;?></div>
    	</a>
     </li>
<?php endif;?>

Такой код все прекрасно считает, и выводит то что нужно, на страшно тормозит сайт из-за того что функция вызывается в цикле.

 

Вопрос как мне правильно передать параметр ($item['id']) в функцию count_rows(), чтобы функция вызывалась только один раз, а не в цикле?


 

 

  • 0

#2 miketomlin

miketomlin
  • Пользователь
  • 261 сообщений
  • Репутация: 35

Отправлено 26 Май 2015 - 18:10

SELECT `category`, COUNT(*) FROM `articles` GROUP BY `category`
 
Если вы в функции выбираете одно "количество", зачем его в цикле считывать? Для вашего кода достаточно было сделать так:
list($count_rows)=mysqli_fetch_row($res);

Сообщение отредактировал miketomlin: 26 Май 2015 - 18:21

  • 0

#3 ShniderHost

ShniderHost
  • Пользователь
  • 204 сообщений
  • Репутация: 13

Отправлено 27 Май 2015 - 12:44

@bo4kov, может быть "иф... брейк" поможет? 


  • 0

#4 bo4kov

bo4kov
    Topic Starter
  • Пользователь
  • 26 сообщений
  • Репутация: 0

Отправлено 27 Май 2015 - 16:43

Что-то я не совсем понимаю этот запрос - "SELECT `category`, COUNT(*) FROM `articles` GROUP BY `category`". можно по подробней? возможно вместо "GROUP BY `category`" нужно написать "GROUP BY `$category`"? и все же не пойму где мне выводить функцию count_rows()? в цикле? как я раньше писал?

 

И этот код не подходит (не правильно работает) list($count_rows)=mysqli_fetch_row($res);, в моем случае нужно использовать цикл, потому что у меня есть и под категории, которые тоже нужно считать.

 

Есть ли какие-то стандартные решения подсчета статей в категории? чтобы не было большой нагрузки?


Сообщение отредактировал bo4kov: 27 Май 2015 - 18:41

  • 0

#5 bo4kov

bo4kov
    Topic Starter
  • Пользователь
  • 26 сообщений
  • Репутация: 0

Отправлено 27 Май 2015 - 18:44

@ShniderHost, думаю брейк, в моем случае, не решит проблему нагрузки 


  • 0

#6 miketomlin

miketomlin
  • Пользователь
  • 261 сообщений
  • Репутация: 35

Отправлено 27 Май 2015 - 18:45

Нет, этот единственный запрос заменяет все ваши запросы по отдельным категориям в цикле. В результате будет сформирована таблица, в которой в первом столбце будут идентификаторы всех существующих категорий, а напротив них во втором – соответственно "количества" статей в каждой из этих категорий.


  • 0

#7 bo4kov

bo4kov
    Topic Starter
  • Пользователь
  • 26 сообщений
  • Репутация: 0

Отправлено 27 Май 2015 - 18:50

@miketomlin, ну тогда зачем параметр передаваемый функции count_rows( $category)? и как мне правильно вывести функцию??? 

 

Но у меня запрос будет посложнее:

$query = "(SELECT COUNT(id) as count_rows 
                FROM `articles` 
                    WHERE id IN 
                  (
                    SELECT `art_id` FROM `table_art_cat` WHERE `cat_id` = $category
                  ))";

и как мне все это переделать?

 

просто у меня создана отдельная таблицы где хранятся id  категорий и статей.


Сообщение отредактировал bo4kov: 27 Май 2015 - 19:01

  • 0

#8 miketomlin

miketomlin
  • Пользователь
  • 261 сообщений
  • Репутация: 35

Отправлено 27 Май 2015 - 19:02

Насчет подкатегорий вообще не понял. При использовании показанного мной запроса, возможно, функция вообще не нужна. Просто построчно обрабатываете результирующую таблицу и выводите "количества" статей в категориях (значения второго столбца).


  • 0

#9 Ixman

Ixman
  • Пользователь PRO
  • 2 159 сообщений
  • Репутация: 432

Отправлено 27 Май 2015 - 19:07

@bo4kov, выложите сюда запрос, который делает обращение к категории

А вообще пост номер 2 даёт ответ, но думаю не совсем оптимальный


  • 0

#10 miketomlin

miketomlin
  • Пользователь
  • 261 сообщений
  • Репутация: 35

Отправлено 27 Май 2015 - 19:10

просто у меня создана отдельная таблицы где хранятся id категорий и статей.
В смысле? У вас категории описаны в той же таблице, что и статьи?
  • 0

robot

robot
  • Пользователь PRO
  • 2 652 сообщений
  • Репутация: 85


Оформление форума – IPBSkins.ru