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


Пользователь месяца
WGN WGN 1-й за Июль
Очков активности: 850 2 темы, 75 сообщений, 7 баллов репутации
Сайт: worldgamenews.com
ТОП самых активных за этот месяц
  • Фотография TimurR
    #1

    TimurR
    Очков активности: 273 3 темы, 17 сообщений, 7 баллов репутации

  • Фотография WGN
    #2

    WGN (worldgamenews.com)
    Очков активности: 66 Вне конкурса за определение пользователя месяца

  • Фотография ShowPrint
    #3

    ShowPrint (ShowPrint.ru)
    Очков активности: 52.5 0 тем, 7 сообщений, 5 баллов репутации

  • Фотография BlackLion
    #4

    BlackLion
    Очков активности: 36 0 тем, 24 сообщения, 1 балл репутации

  • Фотография Vmir
    #5

    Vmir
    Очков активности: 25.5 Вне конкурса за определение пользователя месяца

  • Фотография Napoleon-007
    #6

    Napoleon-007
    Очков активности: 21 0 тем, 14 сообщений, 1 балл репутации

  • Фотография Ixman
    #7

    Ixman (o5cat.ru)
    Очков активности: 21 0 тем, 7 сообщений, 2 балла репутации

  • Фотография alekswebart
    #8

    alekswebart
    Очков активности: 19.5 1 тема, 10 сообщений, 1 балл репутации

  • Фотография r0mZet
    #9

    r0mZet (rz-style.ru)
    Очков активности: 18 2 темы, 6 сообщений, 1 балл репутации

  • Фотография profi
    #10

    profi (1informer.com)
    Очков активности: 12 0 тем, 8 сообщений, 1 балл репутации

  • Показать весь ТОП 10

Kwork.ru - услуги фрилансеров от 500 руб.

Поддержите форум! =)
Апдейты
  • Яндекс тИЦ: 19.11.2017
  • Яндекс выдача: 17.08.2018
Топ 5 участников по репутации


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

#1 bo4kov

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

Отправлено 26 May 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
  • 2652 сообщений
  • Репутация: 85
Советую обратить внимание на следующее:
  1. Объем статьи
  2. Оптимальный размер статьи
  3. Сколько страниц должно быть на среднестатистическом сайте
  4. Как рассчитать количество трафика по поисковому запросу.
  5. Максимально допустимое количество слов в seo-тексте

#2 miketomlin

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

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

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

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

  • 0

#3 ShniderHost

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

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

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


  • 0

#4 bo4kov

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

Отправлено 27 May 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 May 2015 - 18:41

  • 0

#5 bo4kov

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

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

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


  • 0

#6 miketomlin

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

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

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


  • 0

#7 bo4kov

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

Отправлено 27 May 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 May 2015 - 19:01

  • 0

#8 miketomlin

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

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

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


  • 0

#9 Ixman

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

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

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

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


  • 0


#10 miketomlin

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

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

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

robot

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


Похожие темы

  Название темы Автор Статистика Последнее сообщение

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