Выборка неповторяющихся записей из таблицы

Статус
В этой теме нельзя размещать новые ответы.
pslava,
это невреное решение,я его уже предлагал, см. второй пост.
distinct тут нафиг не уперся, убери его и ты изменения не увидишь.

(для потверждения неверности решения смотри автора
он должен быть 6, именно 6 юзер написал последний коммент, а не 1)

Поскольку в таблице cоmments комменты вставляются последовательно, это значит последним будет сообщение с наибольшим id.
Поэтому вот решение:
Код:
SELECT  comments.post_id, comments.id as comm_id, comments.autor, comments.date as newsdate, post.id, post.title 
FROM comments, post, (select post_id, max(id) as commid from comments group by post_id) as p
WHERE post.id=comments.post_id and p.commid=comments.id
ORDER BY comments.date DESC LIMIT 0,10

результат на тестовых данных от Виллен см. вложение
 

Вложения

  • result.jpg
    result.jpg
    8,5 KB · Просмотры: 7
  • Нравится
Реакции: kwin
Решение Для просмотра ссылки Войди или Зарегистрируйся. Всем спасибо за помощь.

Код:
SELECT  comments.post_id, comments.id as comm_id, comments.autor, comments.date as newsdate, post.id, post.flag, post.category, post.title, post.approve, post.alt_name FROM dle_comments  as comments, dle_post as post, (select post_id, max(id) as commid from dle_comments group by post_id) as p
WHERE post.id=comments.post_id and post.approve = 1 and p.commid=comments.id ORDER BY comments.date DESC LIMIT 0, 10

Еще небольшой вопросик, не слишком ли ресурсоемкий запрос поулчается ?
 
проверь на реальных данных
запрос pslava занял 0.0569 сек.
мой запрос (с темп таблицей) занял 0.0021 сек.)
кстати результаты у нас разные
у меня реально сортируется по дате , а pslava надеется что поледний комент с наибольшим id .
 
Получается ~ 0.10460. Много ли это?
 
Получается ~ 0.10460. Много ли это?

это немного замного, но тут нужно выбирать среди того что есть: красота+краткость кода и скоростью работы запроса:)
У Виллена есть один недостаток: что будет если одновременно несолкько пользователей будут выполнять его запрос?:D создать несколько таблиц с одинаковым именем низя:D
 
что будет если одновременно несолкько пользователей будут выполнять его запрос?:D создать несколько таблиц с одинаковым именем низя:D

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

для других применений темптаблицы создают с рандомным именем
и 2 скрипта одинаковую таблицу уже не создут.
 
Старый запрос ~ Занятое время: 0.0475308990479
 
Статус
В этой теме нельзя размещать новые ответы.
Назад
Сверху