Эта тема на forum.dklab.ru


max: Как сделать так, что бы ...? (SQL)
Имеется форум, уровень вложенности такой:
Разделы/Темы/Сообщения

Состоит из таблиц:

1 Sections(разделы)
поля:
s_id
section

2 Themes(темы)
поля:
t_id
theme
time(datetime) - время добавления
s_id

3 Messages(Сообщения)
поля:
m_id
message
time(datetime) - время добавления
t_id

Как сделать так, что бы при вхождении в любой из разделов, темы сортировались по последнему добавленному в них сообщению?

P.S. MySQL 4.1.0-alpha-max-nt(т.е. имеется возможность использовать подзапросы)
Дмитрий Котеров:
Как-нибудь так, если не ошибаюсь:

select t.*, max(m.time) as maxtime
from Themes t, Messages m
where t.s_id=? and m.t_id=t.t_id
group by t.t_id
order by maxtime desc

max:
Действительно так!
Большое спасибо.
Дмитрий Котеров:
Только вопрос встает, насколько медленно это будет работать... По идее, group by и max сами по себе не тормозят, но вот дополнительная выборка из второй таблицы (вернее, из индекса второй таблицы) — не всегда есть гут. А заиндексировать по group by не получится. Вот он и будет при каждом запросе все записи в t перебирать, даже если указан limit...

Триггеров случайно в MySQL4 нет? Ну, чтобы можно было автоматом столбец в таблице обновлять при изменении другой таблицы...
Anonymous:
Нет, триггеров пока вроде нет. Их вроде как только в 5.1 версии обещают.
А так работает вроде быстро, хотя, пока, у меня и информации в базе мало.
DmitriyPopov:
use PostgreSQL :)

Эта тема на forum.dklab.ru