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

Форум MySQL

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

 

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

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

тема: Подсчет, новости в нескольких категориях
 
 автор: absorber   (28.03.2009 в 01:00)   письмо автору
 
 

Всем привет!
есть проблема в подсчете новостей. Есть две таблицы:

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 не очень -)

  Ответить  
 
 автор: ols   (28.03.2009 в 10:01)   письмо автору
 
   для: absorber   (28.03.2009 в 01:00)
 

>проблема наверно тут
>ON (n.category=c.id)
>но вот как сделать что бы он смотрел всю строку =) Помогите, а то в sql не очень -)

Проблема в неправильном проектировании БД. Создайте еще одну таблицу и храните в ней id новости и id категории.

  Ответить  
 
 автор: absorber   (28.03.2009 в 18:18)   письмо автору
 
   для: ols   (28.03.2009 в 10:01)
 

Всмысле? а у меня как ? две таблицы news и category
в таблице news поле category и хранит id категории. Я же расписал.
Или вы имели ввиду чтобы таблице category сделать еще одно поле например count_news и хранить там количество новостей?
---
А может как нибудь прикрутить regexp регулярное выражение? для поиска в таблице news в ячейке category? или IN
ток не пинайте, если глупость сказал=)

  Ответить  
 
 автор: ols   (28.03.2009 в 18:57)   письмо автору
 
   для: absorber   (28.03.2009 в 18:18)
 

Я имел ввиду сделать еще одну таблицу где хранить id новости и id категории, а в таблице news поле категории вооще убрать.
Подсчитать кол-во новостей в каждой категории можно будет таким образом

SELECT COUNT(*) AS `kol` FROM `table` GROUP BY id_categories 

  Ответить  
 
 автор: brokonyer   (30.03.2009 в 10:03)   письмо автору
 
   для: 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";

  Ответить  
 
 автор: absorber   (31.03.2009 в 06:38)   письмо автору
 
   для: brokonyer   (30.03.2009 в 10:03)
 

Спасибо!
ток в запросе ошибка помоему, не указана таблица:
 
$sqlNews = "SELECT count(*) FROM 'news' WHERE `category`  regexp '[[:<:]](".$dataCat['id'].")[[:>:]]'"; 

Я как понял это для каждой категории будет запрос? а если 40 категорий =)
А возможно как то одним запросом подсчитать? добавить эту конструкцию
regexp '[[:<:]](".$dataCat['id'].")[[:>:]]'";
к моему запросу?

  Ответить  
Rambler's Top100
вверх

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