- 01
- 02
- 03
- 04
- 05
- 06
- 07
- 08
- 09
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
SELECT * FROM (
SELECT `comments`.`user`,
`comments`.`time`,
`comments`.`topic`,
`comments`.`id` AS `commid`,
`topic`.`name`,
`topic`.`id`,
`topic`.`translit`,
`topic`.`blog`,
`user`.`login`
FROM `comments`, `topic`, `user`
WHERE
`comments`.`topic` IN (
SELECT DISTINCT `topic`
FROM `comments`
ORDER BY `time` DESC)
AND `topic`.`id` = `comments`.`topic`
AND `user`.`id` = `comments`.`user`
ORDER BY `comments`.`time` DESC
) `data`
GROUP BY `data`.`topic`
ORDER BY `data`.`time` DESC
LIMIT 10
WHERE `comments`.`topic` IN (список айдишников) ограничивает результаты... списком всех айдишников. Т. е. ничего полезного не делает. И даже ORDER BY `time` и DISTINCT никак на результат не повлияют.
LIMIT не заметил?
Стоп, странно.
Оно ведь без этого не работает.
WTF?!
майсикуельщик наверное?
Ехал `comments` через `comments`,
Видит `comments`: `comments`, `comments`!
Сунул `comments` `comments` в `comments`,
`Сomments` `comments` `comments` `comments`.
автору выдать судебный запрет на приближение к субд ближе, чем на 1 км
Да он и так не с СУБД работает...
Да простит меня d++, если я где-то косячу.
вы либо трусы наденьте, либо крестик снимите
либо topic_id, max(id) либо group by
> В СУБД это выглядело бы примерно так
если стояла задача заселектить по одной штуке самого последнего комментария из каждого топика, то да, только order by time desc
кроме того, интуитивно хочется как-то вписать дополнительной фильтр, сокращающий задачу субд,
т.к. пока база маленькая, запрос будет нормально работать, но если в comments уже миллион записей, становится накладно сразу по всем бегать и сортировать - учитывая, что наверняка приложению прямо сейчас нужны ой далеко не все
Да, тупанул я.
> дополнительный фильтр
Ну, я так понял, что ОП мутит что-то типа ГК'шного стока. Что-то никакие фильтры тут в голову не приходят.
Имхо, если эти данные будут выбираться часто - можно немножко денормализовать базу, чтобы не искать эти максимумы-по-группе каждый раз...
именно, в topic засунуть пару лишних колонок о последнем комменте (время, айди), и поддерживать их состояние
если делать движок какого-нибудь суперпопулярного форума с миллионами постов, чтобы на страницу 68 попали правильно отсортированные темы с указанием последнего поста, и при этом запрос не исполнялся по 15 секунд
select id,topic_id from comments group by topic_id having id=max(id)
все значения, которые употребляются в having, уже должны быть в сгруппированном результате - т.к. он работает после группировки
но группировка у тебя не сработает, т.к. либо id надо добавить в груп бай, что бред, либо id убрать из селект - и снова промах
а в говнобазе для неосиляторов майсцыкуль никак по другому