|
|
|
| У меня есть две таблицы:
одна - "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'] - то не выводится название рубрик, для которых нет объявлений....
Как мне сделать, чтоб названия выводились , но в скобках - где количество, был ноль..??? | |
|
|
|
|
|
|
|
для: Dred
(17.08.2006 в 14:45)
| |
SELECT count(*) FROM table WHERE id_categoria = id_categoria
|
| |
|
|
|
|
|
|
|
для: Lelik
(17.08.2006 в 15:11)
| | Не совсем понятно, что получится.... Что значит id_categoria=id_categoria ??? Если используется одна только таблица???
Можно объяснить?? | |
|
|
|
|
|
|
|
для: Dred
(17.08.2006 в 16:59)
| | Прошу прощения...
SELECT count(*) FROM table WHERE id_categoria = id_необходимой категории
|
| |
|
|
|
|
|
|
|
для: Lelik
(17.08.2006 в 17:00)
| | А если мне нужно вывечти список категорий с указанием количества записей по каждой категории, например:
авто (5)
компьютеры (2)
и т.д...
На сколько я понял, данный запрос будет подсчитывать записи только той категории, которой я укажу в запросе... А если у меня пять категорий?? | |
|
|
|
|
|
|
|
для: 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
|
| |
|
|
|
|
|
|
|
для: Trianon
(17.08.2006 в 18:29)
| | Данный запрос выводит категории с нуля если убрать условие по дате...
Иначе выводит только те рубрики, где есть хотя бы одно объявление.... | |
|
|
|
|
|
|
|
для: 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(*)].")";
}
?>
|
В таком роде... | |
|
|
|
|
|
|
|
для: 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
|
| |
|
|
|
|
|
|
|
для: Trianon
(18.08.2006 в 09:22)
| | Ух ты... Работает... То, что надо....
Теперь буду разбираться, что это все значит.... :-))))
Спасибо... | |
|
|
|
|
|
|
|
для: Dred
(18.08.2006 в 11:11)
| | Значит это то, что написано.
После ON стоит условие, по которому соединять строки таблиц. Если условие не выполнено, значит строки таблиц не соединились.
Но поскольку перед JOIN стоит LEFT, то строки из левой таблицы попадут в результат даже тогда, когда соединения не произошло. То есть когда достаточно свежие объявления отсутствуют. Поэтому категории (левая таблица) будут выведены все. | |
|
|
|
|
|
|
|
для: Trianon
(18.08.2006 в 11:18)
| | Теперь понятно.....
С конструкцией JOIN просто примеров не встречал...
Еше раз спасибо... | |
|
|
|