|
|
|
| Всем привет!
есть проблема в подсчете новостей. Есть две таблицы:
category:
id name
1 категория
2 категория2
3 категория3
|
news:
id category name
1 2 новость
2 3 новость2
3 1 новость3
4 1,3 новость4
|
Как подсчитать количество новостей в каждой категории?
если в таблице new колонка category указывает id категорий, причем их может
быть несколько, тоесть новость может находится в разных категориях. должно получится:
категория имеет (2 новости)
категория2 имеет (одну новость)
категория3 (имеет 2 новости)
делал такой запрос:
SELECT c.id, count(n.id) AS count_news FROM category c LEFT JOIN news n ON (n.category=c.id) GROUP BY c.id
|
но он находит для новости4 только первую категорию, тоесть 1, а 3 не замечает.
проблема наверно тут
ON (n.category=c.id)
но вот как сделать что бы он смотрел всю строку =) Помогите, а то в sql не очень -) | |
|
|
|
|
|
|
|
для: absorber
(28.03.2009 в 01:00)
| | >проблема наверно тут
>ON (n.category=c.id)
>но вот как сделать что бы он смотрел всю строку =) Помогите, а то в sql не очень -)
Проблема в неправильном проектировании БД. Создайте еще одну таблицу и храните в ней id новости и id категории. | |
|
|
|
|
|
|
|
для: ols
(28.03.2009 в 10:01)
| | Всмысле? а у меня как ? две таблицы news и category
в таблице news поле category и хранит id категории. Я же расписал.
Или вы имели ввиду чтобы таблице category сделать еще одно поле например count_news и хранить там количество новостей?
---
А может как нибудь прикрутить regexp регулярное выражение? для поиска в таблице news в ячейке category? или IN
ток не пинайте, если глупость сказал=) | |
|
|
|
|
|
|
|
для: absorber
(28.03.2009 в 18:18)
| | Я имел ввиду сделать еще одну таблицу где хранить id новости и id категории, а в таблице news поле категории вооще убрать.
Подсчитать кол-во новостей в каждой категории можно будет таким образом
SELECT COUNT(*) AS `kol` FROM `table` GROUP BY id_categories
|
| |
|
|
|
|
|
|
|
для: absorber
(28.03.2009 в 01:00)
| | ничего нет не возможного, правда есть оптимальный путь
$sqlCat = "SELECT * FROM `category`";
$queryCat = @mysql_query($sqlCat);
if($queryCat){
if(@mysql_num_rows($query)>0){
while($dataCat = @mysql_fetch_array($queryCat)){
$sqlNews = "SELECT count(*) WHERE `category` regexp '[[:<:]](".$dataCat['id'].")[[:>:]]'";
$queryNews = @mysql_query($sqlNews);
if($queryNews){
$count = @mysql_result($queryNews, 0);
echo $dataCat['name']." - ".$count."<br />";
}else echo "NEWS QUERY ERROR";
}
}
}else echo "CATEGORY QUERY ERROR";
|
| |
|
|
|
|
|
|
|
для: brokonyer
(30.03.2009 в 10:03)
| | Спасибо!
ток в запросе ошибка помоему, не указана таблица:
$sqlNews = "SELECT count(*) FROM 'news' WHERE `category` regexp '[[:<:]](".$dataCat['id'].")[[:>:]]'";
|
Я как понял это для каждой категории будет запрос? а если 40 категорий =)
А возможно как то одним запросом подсчитать? добавить эту конструкцию
regexp '[[:<:]](".$dataCat['id'].")[[:>:]]'";
к моему запросу? | |
|
|
|