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



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

#1

Поделиться сообщением #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

robot

robot
  • Пользователь PRO
  • 2 652 сообщений
  • Репутация: 85
Советую обратить внимание на следующее:
  1. Оптимальный размер статьи
  2. Сколько страниц должно быть на среднестатистическом сайте
  3. Как рассчитать количество трафика по поисковому запросу.
  4. Секреты внутренней SEO-оптимизации сайта: как получить максимальный результат?
  5. Семантическое ядро сайта без использования платного софта

#2

Поделиться сообщением #2



miketomlin

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

Отправлено 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

Поделиться сообщением #3



ShniderHost

ShniderHost
  • Неактивные
  • 204 сообщений
  • Репутация: 13

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

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


  • 0

#4

Поделиться сообщением #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

Поделиться сообщением #5



bo4kov

bo4kov
    Topic Starter
  • Неактивные
  • 26 сообщений
  • Репутация: 0

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

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


  • 0

#6

Поделиться сообщением #6



miketomlin

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

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

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


  • 0

#7

Поделиться сообщением #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

Поделиться сообщением #8



miketomlin

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

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

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


  • 0

#9

Поделиться сообщением #9



Ixman

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

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

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

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


  • 0


#10

Поделиться сообщением #10



miketomlin

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

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

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

robot

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


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