Выборка через один запрос

Лексеич

Московский калмык
Выборка через один запрос

Всем доброго времени суток. При написании небольшого форума для сайта столкнулся с проблемкой. Опять всё уткнулось в оптимизацию запроса.

При открытии главной страницы форума там отображаются в колонках:
Название форума-Последняя тема-Автор-Всего тем

Загвоздка в "последней теме".

Таблица тем в следующем виде:
theme_id - forum_id - author_id - theme_title - time_post

forum_id имеет значения от 1 до 4. Т.е. имеем 4 форума.

Выборку последних тем делаю как в ПХПББ, в цикле перебирая все ИД форумов выбираю запросом MAX(time_post). Но это очень мне не нравится в плане производительности.

Как бы запихать всё в один запрос? Пробовал такую конструкцию:

[sql]
SELECT theme_id, author_id, theme_title, MAX(time_post) WHERE forum_id IN (1,2,3,4)
[/sql]

не работает корректно. Любые запросы с использованием MAX возвращают только максимальное значение, не смотря на ид форума. А мне бы хотелось чтобы запрос вернул максимальное значение для каждого forum_id, т.е. для данного варианта четыре строки.
 

Фанат

oncle terrible
Команда форума
я в свое время сделал вот так, криво - джойня таблицу к себе по времени поста, которое допускается, как уникальное.
PHP:
SELECT max(b1.date) as date, if(b1.root=0,b1.id,b1.root) as rid, count(b1.id) as co, 
b2.id, b2.title, b2.author 
FROM Board b1 LEFT JOIN Board b2 ON b2.id=if(b1.root=0,b1.id,b1.root) 
GROUP BY rid ORDER BY date
-~{}~ 28.05.05 13:36:

а блин, у тебя форумы, а не сообщения.

-~{}~ 28.05.05 13:39:

Выборку последних тем делаю как в ПХПББ, в цикле перебирая все ИД форумов выбираю запросом MAX(time_post). Но это очень мне не нравится в плане производительности.
не вижу никаких проблем с производительностью - сделать 4 простых запроса.
с форумами я бы даже париться не стал вообще - сделал бы циклом и забыл
 

Лексеич

Московский калмык
Фанат
ну да... :) вот сижу и 3 минуты фтыкаю в твой запрос, до исправления. а ща Ф5 нажал. :)
 

Лексеич

Московский калмык
Автор оригинала: Фанат
не вижу никаких проблем с производительностью - сделать 4 простых запроса.
с форумами я бы даже париться не стал вообще - сделал бы циклом и забыл
Принято. И как я думаю, на перспективу 15-20 форумов не имеют большого отличия от 4 по производительности. Ага? :)

Спасибо за совет.
 

Фанат

oncle terrible
Команда форума
груп бай форум айди, лефт джойн по макс дате. получаешь айди последнего.
 

Лексеич

Московский калмык
[me]Вернулся[/me]

Вобщем поэтому то и задал вопрос, шоб в будущем не попасть на подводный камень.

А про "небольшой форум", сорри, видимо не точно выразился. Пока не большой, а далее... а вдруг? :)

Есть еще один вариант: прийти с этим вопросом когда форум подрастет и начнет насиловать сервак.

-~{}~ 28.05.05 13:50:

Короче ладно. :) Пойду пытать Апач и Муську. О результатах доложу в случае их положительности.
 

Фанат

oncle terrible
Команда форума
а чё там докладывать-то? запрос у тебя почти готовый есть
 

vokak

Guest
тоже столкнулся с этой же траблой... уже голову всю сломал...
только мне надо ещё и сортировать по времени последнего поста форумы...
т.е. есть таблицы - categ, forums, topics, posts
надо, чтоб при отображении списка форумов отображалась дата последнего поста в этом форуме, ну и соответственно последние сверху...
делаю такой запрос :
PHP:
SELECT *,MAX(posts.post_time) AS lp FROM forums,posts Where forums.cid=$cid And posts.fid=forums.fid GROUP BY forums.fid ORDER BY posts.post_time DESC limit 1,5
не работает сортировка... что неправильно? подскажите плиз...
 
Сверху