Подскажите как правильно сделать запрос к базе MySQL

антигерой

Новичок
Подскажите как правильно сделать запрос к базе MySQL

Есть таблица в форуме со списком мессаг, надо выдернуть последние 8 мессаг, по одной из каждого топика.

Делаю такой запрос:

select distinct ID_TOPIC, ID_MSG, subject, posterTime from smf_messages order by ID_MSG DESC LIMIT 8;

Но не работает, где-то косяк с DISTINCT. Может кто подскажет - как поправить чтобы работало ?
 

Фанат

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

антигерой

Новичок
1) А как ещё выбрать максимальный ID из таблицы ?

2) Когда оно будет больше своего максимума ? Не понял...
 

Фанат

oncle terrible
Команда форума
ВОТ Я И СПРАШИВАЮ - с какой тебе понадобился максимальный id?
ты говорил, что тебе нужны 8 последних записей.
вот их и выбирай.
 

Фанат

oncle terrible
Команда форума
о господи.
если тебе надо из 10 купюр выбрать 3 самых крупных - тебе обязательно знать, какая самая крупная?
 

антигерой

Новичок
Да. Как же иначе я выберу именно самые крупные, если не знаю какие именно крупные ?
 

Фанат

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

объясняю, как взять самые крупные.
раскладываешь купюры по порядку.
слева направо. от крупных к мелким.
потом отсчитываешь три штуки слева.
какого достоинства будет крайняя купюра - ЗНАЧЕНИЯ НЕ ИМЕЕТ.
 

Фанат

oncle terrible
Команда форума
у тебя в твоем запросе все это есть.
и расположение по порядку, и выборка 8 скраю.
 

антигерой

Новичок
Дык еслиб работало - я не спрашивал !!!

С дистинктом НЕ РАБОТАЕТ ВООБЩЕ.

Без дистинкта работает, но выгребает и дубли топиков, а надо без них.

Где то косяк, но я не понимаю где.
 

Фанат

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

Как вопрос задал - так тебе на него и ответили.
 

антигерой

Новичок
Так мне надо ПО ОДНОЙ ИЗ КАЖДОГО ТОПИКА :cool:))

Дистинкт же по топик-id я поставил для этого.

-~{}~ 08.05.07 14:55:

И кстати в Базе MySQL даже при наличии поля с AutoIncrement данные заносятся не последовательно, а в свободные места.

Тоесть если что-то удалялось, то новые записи ставяться на их место, а выборка идёт с Конца и совсем не факт, что записи будут выбираться по очерёдности от максимального ID.

Пример, если в базе ID забиваются так: 1, 2, 23, 26, 5, 6
(23, 26 встали на место удалённых ранее строк 3, 4)
То выборка ТРЁХ СТРОК с сортировкой по убыванию от максимального ID будет такая: 26, 6, 5
А 23 вылетит из запроса, хотя и должна быть там.

Это есть факт - только что тестировал.
 

антигерой

Новичок
Тебе. Ты сказал:

раскладываешь купюры по порядку.
А в базе они не по порядку лежат, а смешанны.

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

Фанат

oncle terrible
Команда форума
определи для себя, что ты называешь порядком убывания и сформируй запрос. за тебя это никто не сделает - это твоя таблица.

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

Активист

Активист
Команда форума
>Дистинкт же по топик-id я поставил для этого.
Смысл distinct другой, в мануале почитай.
 
Сверху