Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Web программирование > SQL, базы данных
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 15.08.2012, 18:19   #1
Pamparam
Форумчанин
 
Регистрация: 08.11.2009
Сообщений: 225
Вопрос Форумы и кол-во тем в них

нужно вывести список форумов и количество тем в каждом из них
Код:
SELECT count(distinct ft.id) as ss,f1.translit,f1.name,f1.descr FROM forums f1 left join forumtopics ft on ft.forum=f1.id
Когда есть count выводится только он и только там где темы есть, а когда его нет - список форумов выводится нормально
как вывести весь список форумов и кол-во тем одним запросом?
Pamparam вне форума Ответить с цитированием
Старый 15.08.2012, 18:34   #2
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 18,922
По умолчанию

Если без заморочек, то можно так
Код:
SELECT f1.id,f1.translit,f1.name,f1.descr,count(ft.id) as ss
  FROM forums f1 
    left join forumtopics ft on ft.forum=f1.id
  group by f1.id,f1.translit,f1.name,f1.descr
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Аватар вне форума Ответить с цитированием
Старый 15.08.2012, 19:05   #3
Pamparam
Форумчанин
 
Регистрация: 08.11.2009
Сообщений: 225
По умолчанию

Когда group by добавляю - запрос грузится дольше в 3 раза, учитывая что в таблице всего-лишь 2 темы
Как в данном примере считается count?
При большом количестве данных, похоже, что время выполнения будет огромное
Может проще хранить значение кол-ва тем для каждого раздела?

update: т.е. в 10 раз =) в таблице 2 темы, а форумов - 30

Последний раз редактировалось Pamparam; 15.08.2012 в 19:20.
Pamparam вне форума Ответить с цитированием
Старый 15.08.2012, 19:17   #4
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 18,922
По умолчанию

Если это MySQL, то достаточно group by f1.id. И потом, наверняка будет limit. Left join достаточно тормозной, можно конечно и без него, но тогда не получится показать форумы без тем. Хранение к-ва тем в форуме добавит лишние заморочки при добавлении (удалении) темы и не приветствуется. Можно и так попробовать, что быстрей сами вычисляйте
Код:
SELECT f1.id,f1.translit,f1.name,f1.descr,
    (SELECT COUNT(*) FROM forumtopics ft WHERE ft.forum=f1.id) as ss
  FROM forums f1 
  group by f1.id,f1.translit,f1.name,f1.descr
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Аватар вне форума Ответить с цитированием
Старый 15.08.2012, 19:29   #5
Pamparam
Форумчанин
 
Регистрация: 08.11.2009
Сообщений: 225
По умолчанию

Цитата:
Сообщение от Аватар Посмотреть сообщение
Если это MySQL, то достаточно group by f1.id. И потом, наверняка будет limit. Left join достаточно тормозной, можно конечно и без него, но тогда не получится показать форумы без тем. Хранение к-ва тем в форуме добавит лишние заморочки при добавлении (удалении) темы и не приветствуется. Можно и так попробовать, что быстрей сами вычисляйте
Код:
SELECT f1.id,f1.translit,f1.name,f1.descr,
    (SELECT COUNT(*) FROM forumtopics ft WHERE ft.forum=f1.id) as ss
  FROM forums f1 
  group by f1.id,f1.translit,f1.name,f1.descr
угу, в 5 раз быстре, а если убрать group, то в 10
Ну а в будущем можно будет опустить до обычного, т.к. все разделы будут забиты темами
спасиб!
Pamparam вне форума Ответить с цитированием
Старый 15.08.2012, 19:48   #6
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 18,922
По умолчанию

Да, действительно в последнем примере перемудрил с GROUP BY, он там не нужен
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Аватар вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Постинг на форумы с помощью delphi eFail Работа с сетью в Delphi 2 25.07.2010 09:36
Форумы на MyBB.ru. Яр|/||< (^_^) Свободное общение 0 05.05.2010 19:22
За форумы будут сажать mihali4 Свободное общение 16 05.01.2010 21:03
Найти кол-во целых чисел в первой последовательности и кол-во нечетных во второй. DjDeniels-61 Помощь студентам 7 28.06.2009 13:04