Как сделать правильно такой SQL-запрос?

Sim

Guest
Как сделать правильно такой SQL-запрос?

База данных - mySQL
Надо делать выборку типа:
"select root,id,max(date) as dt from forum group by root order by dt desc limit 30"

Поле root(int) служит для определения id темы к которой относится данное сообщение и имеет одинаковое значение для всей темы равное id первого сообщения в теме.
Поле date(int) - дата сообщения в формате timestamp, меняется на текущее если автор сообщения редактирует свое сообщение, поле не уникальное.
Поле id(int) primary key - монотонно возрастающее, ИД сообщения.
Нужно чтобы в результате запроса поле id относилось к той записи, где найдено значение max(date), что на практике не получается.
Реально выбирается id из первой найденной записи в групповом наборе, соответсвующем данному полю root. Записи в этом групповом наборе не сортируются, а идут в том порядке как расположены в таблице на сервере.

Так вот как сделать правильно запрос чтобы id выбирался соответствующий найденному max(date)?
 

chira

Новичок
если версия MySQL не 4.1, то только через временную таблицу
 

Sim

Guest
Конкретнее варианты и с 4.1 и с более ранними версиями пожалуйста...
 

_RVK_

Новичок
Sim
Тебе нужно получить запись где значение поля date максимально? тогда:
SELECT * FROM forum ORDER BY date DESC LIMIT 1
 

Фанат

oncle terrible
Команда форума
Кстати, да, у меня получить все нужные данные для последнего сообщения не получилось - только дату.

Временная таблица для форума - это, конечно, бред, так что, науилучшим решением будет сделать таки таблицу заголовков тем и апдейтить её при каждом посте.
 

_RVK_

Новичок
Кстати, да, у меня получить все нужные данные для последнего сообщения не получилось - только дату
Я чего то не понял? Фанат, поясни что значит "все нужные данные" и чем мой вариант не устраивает.
 

Фанат

oncle terrible
Команда форума
в первом вопросе все объяснено.
или читай внимательно, или не отвечай.
Эта ветка - для объяснений автору вопроса.

-~{}~ 24.11.04 13:28:

кстати, если считать date уникальной, то можнo, наверное, приджойнить по t2.date=max(t1.date)?
 

Sim

Guest
Есть у меня еще идея - при обновлении записи после редактирвоания пользователем своего сообщения, обновлять и ИД записи на максимальный+1 тогда запрос делать такой:

"select root,max(id) as lid,max(date) as dt from forum group by root order by dt desc limit 30"

И все будет работать так как надо.
 

Sim

Guest
Ну проблема заключается в том, что id не соответствует max(date) так вот, если делать выборку max(id) и max(date) то при условии что максимальный id соответсвует максимальной дате все получается так как надо, но если обновлять дату при редактировании на более новую то и ИД надо обновлять на максимальный+1 чтобы он теперь был максимальным, иначе опять несоответствие получим.
 

Sim

Guest
Отсутствие понимания собеседника - еще не повод для оскорблений.
P.S. подумай над моей подписью... хотя не факт что тебе это поможет.
 

Фанат

oncle terrible
Команда форума
Помогать тут надо, милый, тебе.
Если ты собрался уникальный идентификатор записи менять по совершенно идиотской причине. При том, что менять его не нужно вообще никогда.

А подписей и аватар я, к счастью, не вижу.
И тебя, кстати, никто не оскорблял.
 

Sim

Guest
Я просто нашел вариант решения проблемы, знаешь другой вариант - предложи, не знаешь - молчи, дай возможность другим людям высказаться.
Я не виноват что ты не понял мою мысль.
 

Фанат

oncle terrible
Команда форума
Это не вариант :)
И понимать тут нечего. Как я уже тебе сообщал - это не мысль, а бред.
И где ты увидел, что я не даю другим людям высказаться?!

старайся немного думать, перед тем, как писать.
у тебя в трех строчках три ошибки.
 

Sim

Guest
Ок, согласен идея хоть и осуществима, но сама по себе кривая т.к. порождает некоторые сложноразрешимые проблемы при построении дерева ответов.

Какие еще будут предложения по данной проблеме?
 
Сверху