Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
MySQL 5. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В. PHP. Практика создания Web-сайтов (второе издание). Авторы: Кузнецов М.В., Симдянов И.В. Объектно-ориентированное программирование на PHP. Авторы: Кузнецов М.В., Симдянов И.В. Программирование. Ступени успешной карьеры. Авторы: Кузнецов М.В., Симдянов И.В. C++. Мастер-класс в задачах и примерах. Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум MySQL

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: Как подсчитать количество записей по категориям??
 
 автор: Dred   (17.08.2006 в 14:45)   письмо автору
 
 

У меня есть две таблицы:
одна - "rubrica"
id_rub name
вторая - "ob"
id_ob id_rub name price data


Мне нужно подсчитать количество объявлений в каждой рубрике и вывести в виде
- Рубрика (кол-во объявлений)...

Я создал запрос:
$query_ob = sprintf("SELECT rubrica.id_rub, rubrica.name_rub, COUNT(ob.id_ob) AS total FROM rubrica, ob WHERE ob.id_rub=rubrica.id_rub AND ob.data>=CURDATE() GROUP BY rubrica.id_rub");

Когда я вывожу результата - echo $row_ob['total'] - то не выводится название рубрик, для которых нет объявлений....
Как мне сделать, чтоб названия выводились , но в скобках - где количество, был ноль..???

   
 
 автор: Lelik   (17.08.2006 в 15:11)   письмо автору
 
   для: Dred   (17.08.2006 в 14:45)
 

SELECT count(*) FROM table WHERE id_categoria = id_categoria

   
 
 автор: Dred   (17.08.2006 в 16:59)   письмо автору
 
   для: Lelik   (17.08.2006 в 15:11)
 

Не совсем понятно, что получится.... Что значит id_categoria=id_categoria ??? Если используется одна только таблица???
Можно объяснить??

   
 
 автор: Lelik   (17.08.2006 в 17:00)   письмо автору
 
   для: Dred   (17.08.2006 в 16:59)
 

Прошу прощения...

SELECT count(*) FROM table WHERE id_categoria = id_необходимой категории

   
 
 автор: Dred   (17.08.2006 в 18:20)   письмо автору
 
   для: Lelik   (17.08.2006 в 17:00)
 

А если мне нужно вывечти список категорий с указанием количества записей по каждой категории, например:
авто (5)
компьютеры (2)

и т.д...
На сколько я понял, данный запрос будет подсчитывать записи только той категории, которой я укажу в запросе... А если у меня пять категорий??

   
 
 автор: Trianon   (17.08.2006 в 18:29)   письмо автору
 
   для: Dred   (17.08.2006 в 14:45)
 


SELECT rubrica.id_rub, rubrica.name_rub, COUNT(ob.id_ob) AS total 
FROM rubrica LEFT JOIN ob ON ob.id_rub=rubrica.id_rub WHERE ob.data>=CURDATE() 
GROUP BY rubrica.id_rub, rubrica.name_rub

   
 
 автор: Dred   (17.08.2006 в 20:55)   письмо автору
 
   для: Trianon   (17.08.2006 в 18:29)
 

Данный запрос выводит категории с нуля если убрать условие по дате...
Иначе выводит только те рубрики, где есть хотя бы одно объявление....

   
 
 автор: Lelik   (18.08.2006 в 02:07)   письмо автору
 
   для: Dred   (17.08.2006 в 20:55)
 

можно запросы в цикле

<?php
$query 
"SELECT * FROM categories";
while(
$res mysql_fetch_array(mysql_query($query)))
   {
      echo 
$res['categories'];
       
$query2 "SELECT count(*) FROM tovar WHERE id_categories=".$res['id_categories'];
       
$result mysql_query($query2);
       
$item mysql_fetch_array($result);
       echo 
" (".$item[count(*)].")";
   }
?>


В таком роде...

   
 
 автор: Trianon   (18.08.2006 в 09:22)   письмо автору
 
   для: Dred   (17.08.2006 в 20:55)
 

Да... с условием и вправду надо чуть изменить...

SELECT rubrica.id_rub, rubrica.name_rub, COUNT(ob.id_ob) AS total  
FROM rubrica LEFT JOIN ob ON (ob.id_rub=rubrica.id_rub AND ob.data>=CURDATE())
GROUP BY rubrica.id_rub, rubrica.name_rub 

   
 
 автор: Dred   (18.08.2006 в 11:11)   письмо автору
 
   для: Trianon   (18.08.2006 в 09:22)
 

Ух ты... Работает... То, что надо....
Теперь буду разбираться, что это все значит.... :-))))

Спасибо...

   
 
 автор: Trianon   (18.08.2006 в 11:18)   письмо автору
 
   для: Dred   (18.08.2006 в 11:11)
 

Значит это то, что написано.
После ON стоит условие, по которому соединять строки таблиц. Если условие не выполнено, значит строки таблиц не соединились.
Но поскольку перед JOIN стоит LEFT, то строки из левой таблицы попадут в результат даже тогда, когда соединения не произошло. То есть когда достаточно свежие объявления отсутствуют. Поэтому категории (левая таблица) будут выведены все.

   
 
 автор: Dred   (18.08.2006 в 15:17)   письмо автору
 
   для: Trianon   (18.08.2006 в 11:18)
 

Теперь понятно.....
С конструкцией JOIN просто примеров не встречал...

Еше раз спасибо...

   
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования