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


Подсчёт количества товара в категориях и вывод их числа


Сообщений в теме: 49

#21 Я.Сергей

    Продвинутый пользователь

  • Клиенты WebForMySelf
  • PipPipPip
  • 1 550 сообщений
Репутация: 278

Отправлено 03 Апрель 2016 - 16:24

Цитата

А можно как-то логично сделать подсчёт всех не скрытых товаров подкатегорий

можно, нужно добавить условие в подзапрос
$query = "SELECT *, (SELECT COUNT(*) FROM goods WHERE goods_brandid = brand_id AND visible = '1') as cnt FROM brands WHERE visible2 = '1' ORDER BY parent_id, brand_name";


#22 Вячеслав

    Продвинутый пользователь

  • Пользователи
  • PipPipPip
  • 867 сообщений
  • ГородВашингтон
Репутация: 2

Отправлено 03 Апрель 2016 - 16:28

В подзапрос добавил.
То есть вот так правильно?
function catalog(){
	$query = "SELECT *, (SELECT COUNT(*) FROM goods WHERE goods_id = brand_id AND visible = '1') as cnt FROM brand WHERE visible2 = '1' ORDER BY parent_id, brand_name";
	$res = mysql_query($query) or die(mysql_query());


	//массив категорий
	$cat = array();
	while($row = mysql_feth_assoc($res)){
  if(!$row['parent_id']){
	   $cat[$row['brand_id']][] = $row['brand_name'];
	   $cat[$row['brand_id']]['cnt'] = $row['cnt'];
  }else{
	   $cat[$row['parent_id']]['sub'][] = $row['brand_name'];
	   $cat[$row['parent_id']]['sub']] = $row['cnt'];
}
	}
	return $cat;
}

Количество товаров в подкатегории выводится изумительно!
А теперь нужно подсчитать общую сумму и вывести её к основной категории.

Сообщение отредактировал Вячеслав: 04 Апрель 2016 - 11:22


#23 Вячеслав

    Продвинутый пользователь

  • Пользователи
  • PipPipPip
  • 867 сообщений
  • ГородВашингтон
Репутация: 2

Отправлено 03 Апрель 2016 - 16:38

Не могу понять как их подсчитать вместе.

#24 Я.Сергей

    Продвинутый пользователь

  • Клиенты WebForMySelf
  • PipPipPip
  • 1 550 сообщений
Репутация: 278

Отправлено 03 Апрель 2016 - 16:53

попробуйте такой вариант

function catalog(){
	    $query = "SELECT *, (SELECT COUNT(*) FROM goods WHERE goods_brandid = brand_id AND visible = '1') as cnt FROM brands WHERE visible2 = '1' ORDER BY parent_id, brand_name";
	    $res = mysql_query($query) or die(mysql_query());

	    //массив категорий
	    $cat = array();
	    while($row = mysql_fetch_assoc($res)){
   if(!$row['parent_id']){
    $cat[$row['brand_id']][] = $row['brand_name'];
	  
    if($row['cnt'] > 0)
	 $cat[$row['brand_id']]['cnt'] = $row['cnt'];
    else{
	 $query = "SELECT COUNT(*) FROM goods WHERE goods_brandid IN(SELECT brand_id FROM brands WHERE parent_id = $cat[$row['brand_id']) ";
	 $res2 = mysql_query($query);
	 $row2 = mysql_fetch_array($res2);
	 $cat[$row['brand_id']]['cnt'] = $row2[0];
    }
   }else{
	   $cat[$row['parent_id']]['sub'][$row['brand_id']][] = $row['brand_name'];
	   $cat[$row['parent_id']]['sub'][$row['brand_id']]['cnt'] = $row['cnt'];
   }
	    }
	    return $cat;
}


#25 Вячеслав

    Продвинутый пользователь

  • Пользователи
  • PipPipPip
  • 867 сообщений
  • ГородВашингтон
Репутация: 2

Отправлено 03 Апрель 2016 - 17:00

Тут где-то синтаксическая ошибка

#26 Вячеслав

    Продвинутый пользователь

  • Пользователи
  • PipPipPip
  • 867 сообщений
  • ГородВашингтон
Репутация: 2

Отправлено 03 Апрель 2016 - 17:08

Parse error: syntax error, unexpected '[', expecting ']'

#27 Я.Сергей

    Продвинутый пользователь

  • Клиенты WebForMySelf
  • PipPipPip
  • 1 550 сообщений
Репутация: 278

Отправлено 03 Апрель 2016 - 17:14

else{
	 $brand_id = (int)$cat[$row['brand_id'];
	 $query = "SELECT COUNT(*) FROM goods WHERE goods_brandid IN(SELECT brand_id FROM brands WHERE parent_id = $brand_id) ";
	 $res2 = mysql_query($query);
	 $row2 = mysql_fetch_array($res2);
	 $cat[$row['brand_id']]['cnt'] = $row2[0];
    }


#28 Вячеслав

    Продвинутый пользователь

  • Пользователи
  • PipPipPip
  • 867 сообщений
  • ГородВашингтон
Репутация: 2

Отправлено 03 Апрель 2016 - 17:19

Добавил к этому запросу ] вот тут
$brand_id = (int)$cat[$row['brand_id']]

Ошибка исчезла теперь. А теперь как вывести общую сумму товаров скажите

#29 Я.Сергей

    Продвинутый пользователь

  • Клиенты WebForMySelf
  • PipPipPip
  • 1 550 сообщений
Репутация: 278

Отправлено 03 Апрель 2016 - 17:24

так же
<?php if(count($item) > 1): // если это родительская категория ?>
<h3><li><a href="#"><?=$item[0]?> (<?=$item['cnt']?>)</a></li></h3>


#30 Вячеслав

    Продвинутый пользователь

  • Пользователи
  • PipPipPip
  • 867 сообщений
  • ГородВашингтон
Репутация: 2

Отправлено 03 Апрель 2016 - 17:26

Высветил нули напротив категории

#31 Я.Сергей

    Продвинутый пользователь

  • Клиенты WebForMySelf
  • PipPipPip
  • 1 550 сообщений
Репутация: 278

Отправлено 03 Апрель 2016 - 17:30

ну да логично
$brand_id = (int)$cat[$row['brand_id']][0];


#32 Вячеслав

    Продвинутый пользователь

  • Пользователи
  • PipPipPip
  • 867 сообщений
  • ГородВашингтон
Репутация: 2

Отправлено 03 Апрель 2016 - 17:33

Всё-равно нули..

#33 Я.Сергей

    Продвинутый пользователь

  • Клиенты WebForMySelf
  • PipPipPip
  • 1 550 сообщений
Репутация: 278

Отправлено 03 Апрель 2016 - 17:35

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

#34 Вячеслав

    Продвинутый пользователь

  • Пользователи
  • PipPipPip
  • 867 сообщений
  • ГородВашингтон
Репутация: 2

Отправлено 03 Апрель 2016 - 17:37

Хорошо. Вам спасибо огромное! Как доделаем я вас отблагодарю. Очень жду. Спасибо за неоценимую помощь мне.

#35 Я.Сергей

    Продвинутый пользователь

  • Клиенты WebForMySelf
  • PipPipPip
  • 1 550 сообщений
Репутация: 278

Отправлено 04 Апрель 2016 - 07:21

Вячеслав, вот рабочий вариант функции

с запросами все в порядке, просто не ту переменную использовали для получения кол-ва товаров

function catalog(){
			$query = "SELECT *, (SELECT COUNT(goods_id) FROM goods WHERE goods_brandid = brand_id AND visible = '1') as cnt FROM brands WHERE visible = '1' ORDER BY parent_id, brand_name";
			$res = mysql_query($query) or die(mysql_query());
			//массив категорий
			$cat = array();
			while($row = mysql_fetch_assoc($res)){
	  if(!$row['parent_id']){
	 $cat[$row['brand_id']][] = $row['brand_name'];
	  
	 if($row['cnt'] > 0)
	   $cat[$row['brand_id']]['cnt'] = $row['cnt'];
	 else{
	   $brand_id = (int)$row['brand_id'];
	   $query2 = "SELECT COUNT(*) FROM goods WHERE goods_brandid IN(SELECT brand_id FROM brands WHERE parent_id = $brand_id)";
	   $res2 = mysql_query($query2) or die(mysql_query());
	   $row2 = mysql_fetch_array($res2);
	   $cat[$row['brand_id']]['cnt'] = $row2[0];
	 }
	  }else{
		$cat[$row['parent_id']]['sub'][$row['brand_id']][] = $row['brand_name'];
		$cat[$row['parent_id']]['sub'][$row['brand_id']]['cnt'] = $row['cnt'];
	  }
   }
			return $cat;
}


#36 Вячеслав

    Продвинутый пользователь

  • Пользователи
  • PipPipPip
  • 867 сообщений
  • ГородВашингтон
Репутация: 2

Отправлено 04 Апрель 2016 - 10:07

Сергей, спасибо огромное!
Всё работает как надо!
Вы сказали, что тут не за что платить, но я всё же переводу вам хоть какую скромную сумму в знак благодарности. Оставьте, пожалуйста, номер счёта..

#37 Вячеслав

    Продвинутый пользователь

  • Пользователи
  • PipPipPip
  • 867 сообщений
  • ГородВашингтон
Репутация: 2

Отправлено 04 Апрель 2016 - 10:27

Только, Сергей, скажите, идёт подсчёт и скрытых товаров, а как сделать, чтобы скрытые товары не учитывались?

#38 Я.Сергей

    Продвинутый пользователь

  • Клиенты WebForMySelf
  • PipPipPip
  • 1 550 сообщений
Репутация: 278

Отправлено 04 Апрель 2016 - 10:40

SELECT COUNT(*) FROM goods t1 WHERE goods_brandid IN(SELECT brand_id FROM brands WHERE parent_id = $brand_id) AND t1.visible = '1'


#39 Вячеслав

    Продвинутый пользователь

  • Пользователи
  • PipPipPip
  • 867 сообщений
  • ГородВашингтон
Репутация: 2

Отправлено 04 Апрель 2016 - 10:40

И вот какой момент, если в категории скрыты все товары из всех подкатегорий, то вместо подкатегорий выдаётся ошибка :
Warning: Invalid argument supplied for foreach() in

#40 Вячеслав

    Продвинутый пользователь

  • Пользователи
  • PipPipPip
  • 867 сообщений
  • ГородВашингтон
Репутация: 2

Отправлено 04 Апрель 2016 - 10:47

Просмотр сообщенияЯ.Сергей (04 Апрель 2016 - 10:40) писал:

[CODE]
SELECT COUNT(*) FROM goods t1 WHERE goods_brandid IN

Отлично. С этим запросом подсчёт идёт только не скрытых товаров.
Однако пока всё так же если скрыть из подкатегории все товары, то всё в порядке, но, если скрыть саму подкатегорию, что появляется ошибка.

Сообщение отредактировал Вячеслав: 04 Апрель 2016 - 11:22






Количество пользователей, читающих эту тему: 1

0 пользователей, 1 гостей, 0 анонимных