Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/topic.php on line 737
Форумы портала PHP.SU :: Помогите с запросом

 PHP.SU

Программирование на PHP, MySQL и другие веб-технологии
PHP.SU Портал     На главную страницу форума Главная     Помощь Помощь     Поиск Поиск     Поиск Яндекс Поиск Яндекс     Вакансии  Пользователи Пользователи


 Страниц (1): [1]   

> Без описания
keysi_
Отправлено: 18 Мая, 2010 - 10:02:24
Post Id



Новичок


Покинул форум
Сообщений всего: 17
Дата рег-ции: Окт. 2009  


Помог: 1 раз(а)




В базе данных имеются две таблицы:
db_my_category - категории новостей:
id | name | runame | off |
1 | animal | животные | 1 |
2 | politic | политика | 1 |
3 | world | в мире | 1 |
4 | test | test | 0 |

db_my_news - собственно сами новости
id | title | text | category | date |
1 | news1 | sdfds | 1 | 05/05/2005 |
2 | news2 | czdx | 1 | 05/05/2005 |
3 | news3 | zxcz | 3 | 05/05/2005 |


Задача: получить список категорий и количество новостей в этих категориях, типа такого:
id | name | runame | count |
1 | animal | животные | 2 |
2 | politic | политика | 0 |
3 | world | в мире | 1 |


Надеялся что заработает что нибудь такое, но синтаксис не позволяет, куча лагов:
CODE (SQL):
скопировать код в буфер обмена
  1. SELECT category.id AS id, category.name AS name, category.runame AS runame, COUNT(publ.*) AS count
  2. FROM db_my_category AS category, db_my_news AS publ
  3. WHERE category.off <> '0' AND publ.category = category.id
  4. ORDER BY id ASC
  5.  

ps Важное условие: все необходимо вместить в один запрос, для уменьшения нагрузки на сервер.
________________________________ ________________________________ __________
(Добавление)
Всем спасибо. Улыбка Решение найдено.

CODE (SQL):
скопировать код в буфер обмена
  1. SELECT category.id AS catid, category.name AS name, category.runame AS runame, COUNT(publ.*) AS count, (SELECT COUNT(*) AS count FROM db_my_news AS publ WHERE publ.category=catid) AS count
  2. FROM db_my_category AS category
  3. WHERE category.off <> '0'
  4. ORDER BY id ASC


Как всегда, все было проще чем казалось. Хотя все же получилось очень громиоздко.
Может у кого есть еще идеи?

(Отредактировано автором: 18 Мая, 2010 - 10:24:09)

 
 Top
scray
Отправлено: 19 Мая, 2010 - 06:59:28
Post Id


Гость


Покинул форум
Сообщений всего: 68
Дата рег-ции: Апр. 2009  


Помог: 0 раз(а)




я бы создал еще одну таблицу, в котрой два поля
category_id|news_id

(Отредактировано автором: 19 Мая, 2010 - 06:59:45)

 
 Top
Страниц (1): [1]
Сейчас эту тему просматривают: 0 (гостей: 0, зарегистрированных: 0)
« SQL и Архитектура БД »


Все гости форума могут просматривать этот раздел.
Только зарегистрированные пользователи могут создавать новые темы в этом разделе.
Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.
 



Powered by PHP  Powered By MySQL  Powered by Nginx  Valid CSS  RSS

 
Powered by ExBB FM 1.0 RC1. InvisionExBB