Подсчет количества записей в базе при выполнении цикла

Vladimir59

Новичок
Подсчет количества записей в базе при выполнении цикла

Имеется две таблицы в базе:
В первой, с именем subcat - поля id, subcat (Subcat отражает название подкатегории товара)
Во второй с именем tovar id, id_subcat, name(id_subcat связано с id первой таблицы, name-название товара)
Нужно что бы на странице рядом с названием категории выводилось количество товара данной категории.
С выводом все получается нормально, но вот с подсчетом товара по каждой выведенной категории никак не получается.
Вот код, который у меня получилось написать. Код для вывода в три столбца.
<?php
$res_subcat=@mysql_query("SELECT id, subcat FROM subcategories WHERE id_cat='$cat'", $con);
$myrow_subcat=mysql_fetch_array($res_subcat);

$res_count=@mysql_query("SELECT id_subcat FROM tovar", $con);
$myrow_count=mysql_fetch_array($res_count);
$count=array_count_values($myrow_count);

$i=0;
echo "<TABLE >\;
do{
if(($i==0)||!($i%3))echo"<TR>\n";
$i++;
printf("<TD><A HREF='subcat.php?subcat=%s'>%s</A>&nbsp;(%s)</span></DIV>
</TD>",$myrow_subcat['id'],$myrow_subcat['subcat'],$count[$myrow_subcat['id']]);
if(!($i% 3)||(mysql_num_rows($res_subcat)==$i))echo"</TR>\n";
}
while($myrow_subcat=mysql_fetch_array($res_subcat));
echo "</TABLE>";
?>
$cat передается из предыдущей страницы, весь код не пишу, так как в этом нет необходимости, все категории выводятся нормально. С подсчетом не получанется. В базе все записи имеются.
Помогите пожалуйста решить данную проблему. Заранее благодарен!
 

Alexandre

PHPПенсионер
подсчет кол-во под_категорий осуществляется запросом:
SELECT count(*) FROM your_table WHERE cat_id = <id>
 

Gas

может по одной?
если нужно для одной категории, то наверное лучше как сказал Alexandre
если для многих, count(*) ... left join ... group by ...
 

Vladimir59

Новичок
подсчет кол-во под_категорий осуществляется запросом:
SELECT count(*) FROM your_table WHERE cat_id = <id>
Большое спасибо за отклик. Вариант предложенный Вами рассматривал, но не могу понять как им воспользоваться. Каким образом поставить предлагаемый Вами запрос в тело цикла, сообразить не могу. Результаты запроса, как я понимаю надо сначала поместить в каую-нибудь переменную? Дело в том, что подкатегории выводятся через цикл и для каждой подкатегории соответствующее значение $myrow_subcat['id'] определяется в процессе выполнения цикла. Насколько я понимаю в предлагаемом варианте для каждой подкатегории будет делаться запрос к базе? 1000 категорий - 1000 запросов? Понимаю, что решение довольно простое, но догадаться не могу. Похоже что я сам на чем-то зациклился. Помогите пожалуйста,
 

Vladimir59

Новичок
— Вы выводите по 1000 категорий на страницу?
Да нет конечно, не 1000, порядка двух трех десятков. Это я привел грубое сравнение. Вопрос в том, какое решение в данном случае будет оптимальным и как его реализовать. Если оптимальней обрабатывать запрос в цикле, то каким образом его там прописать? Если 30 запросов к базе будут существенно замедлять обработку страницы, то каким образом можно реализовать подсчет подкатегорий вне цикла и как вывести эти данные рядом с каждой подкатегорией, выводимой в цикле? Плиз
 

Vladimir59

Новичок
Спасибо. С запросом понятно. Только где его прописать и как вывести результат этого запроса рядом с названием выводимой подкатегории так и не разобрался. Я думаю, все когда-то так же начинали. Надеюсь на помощь.
 

Vladimir59

Новичок
Огромное спасибо Alexandre и Gas за помощь. Не мог понять как работает и как правильно воспользоваться COUNT(). Двое суток упорного поиска и эксперементов привели к желаемому результату. Решил задачу объединением с помощью LEFT JOIN трех таблиц и введением в запрос COUNT(). Получился следующий код:
PHP:
$res_cat=@mysql_query("SELECT c.*, s.id, s.id_cat, s.subcat, t.id_subcat, COUNT(t.id_subcat) AS count FROM categories AS c LEFT JOIN subcategories AS s ON c.id=s.id_cat LEFT JOIN tov AS t ON t.id_subcat=s.id WHERE c.id='$cat' GROUP BY s.subcat", $con);
$array_cat=mysql_fetch_array($res_cat);
$i=0;
  echo "<TABLE>"; 
  do{	
   if(($i==0)||!($i%3))echo"<TR>";     
   $i++;
   printf("<TD><A HREF='subcat.php?subcat=%s'>%s</A>(%s)</  TD>", $array_cat['id'],$array_cat['subcat'],$array_cat['count']);     
   if(!($i% 3)||(mysql_num_rows($res_cat)==$i))echo"</TR>";
   } 
  while($array_cat=mysql_fetch_array($res_cat));
  echo "</TABLE>";
 
Сверху