Подсчет товаров в категориях рекурсия

120
01 января 2020, 15:10

Прошу помощи, сваял функцию, которая должна считать, а она считает только до первого предка, прошу помощи.

Сама функция:

function col_tovar($id,$c=0){
//считаем число товаров в категории
$t = mysql_result(mysql_query("SELECT COUNT(*) FROM `tovar` WHERE `id_cat`=".$id.""),0);
static $n=0;
$n = $t + $c;
//смотрим какие категории есть в этой
$sql = mysql_query("SELECT `id` FROM `kat` WHERE `mid`=".$id);
while($idcat = mysql_fetch_array($sql)){
col_tovar($idcat[0],$n);
}
if(mysql_result(mysql_query("SELECT COUNT(*) FROM `kat` WHERE `mid`=".$id),0) == 0){
    return $n;
    unset($n);
   }else return $n;
}

Результат:

Answer 1

Вот так должно работать правильно.

Некоторые стилевые правки:

  • поправил отступы;
  • sql обычно принято называть текст запроса, а не его результат, лучше использовать, например, rows или result;
  • не стоит, по возможности, усложнять операцию в строке, поэтому я разделил mysql_query и mysql_result;
  • mysql_fetch_array выдает результат в форме, которая здесь не используется. Заменил на более простую mysql_fetch_row
function col_tovar($id) {
  //считаем число товаров в категории
  $rows = mysql_query("SELECT COUNT(*) FROM `tovar` WHERE `id_cat`=".$id);
  $n = mysql_result($rows, 0);
  //смотрим какие подкатегории есть в этой категории
  $rows = mysql_query("SELECT `id` FROM `kat` WHERE `mid`=".$id);
  while ($idcat = mysql_fetch_row($rows)) {
    $n += col_tovar($idcat[0]);
  }
  return $n;
}
READ ALSO
Как работать с Swoole в Laravel?

Как работать с Swoole в Laravel?

Есть у кого-то опыт работы с пакетом Laravel Swoole?

148
Как использовать Twig

Как использовать Twig

У меня небольшой проект (mvc,OOP)Покажите пожалуйста как правильно подключать Twig и как его использовать в controller

132
Unit Tests Нужна помощь

Unit Tests Нужна помощь

Всем привет! Пишу на PHP, в качестве фреймворка использую Yii2, для написания тестов использую CodeceptionСразу скажу, что в написании тестов я новичок

143
Экспорт бд laravel

Экспорт бд laravel

Всем приветМоя проблема в том что когда я экспортирую бд

94