Задавайте вопросы, мы ответим
Вы не зашли.
В базе данных имеются две таблицы:
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 |
Надеялся что заработает что нибудь такое, но синтаксис не позволяет, куча лагов:
SELECT category.id AS id, category.name AS name, category.runame AS runame, COUNT(publ.*) AS count
FROM db_my_category AS category, db_my_news AS publ
WHERE category.off <> '0' AND publ.category = category.id
ORDER BY id ASC
ps Важное условие: все необходимо вместить в один запрос, для уменьшения нагрузки на сервер.
Отредактированно keysi_ (18.05.2010 10:53:58)
Неактивен
Всем спасибо. Решение найдено.
SELECT category.id AS catid, category.name AS name, category.runame AS runame, (SELECT COUNT(*) AS count FROM db_my_news AS publ WHERE publ.category=catid) AS count
FROM db_my_category AS category
WHERE category.off <> '0'
ORDER BY id ASC
Как всегда, все было проще чем казалось. Хотя все же получилось очень громиоздко.
Может есть еще идеи?
Отредактированно keysi_ (20.05.2010 08:06:29)
Неактивен
Ну, да, или обычный JOIN с группировкой. Я предпочитаю JOIN, но это дело вкуса
Неактивен