1

Тема: GROUP BY и сортировка по дате

Есть таблица post_user поля: id(auto_increment), text(текст записи), date(datetime), id_user(id пользователя которой опубликовал пост) и id_post(id данного поста уникальное во всех других таблицах post_user, например post_vanicon, post_ivan и тд) где необходимо выбрать записи по уникальному полю id_post, то есть в этой таблице могут хранится и одинаковые записи с одинаковом id_post но разным id_user. Но записи нужно вывести так чтоб к примеру если нашлось 2 одинаковые записи с одинаковым id_post то выбрал ту запись у которой date более новее то есть то которое позднее опубликовано.
Пробовал с помощью GROUP BY 'id_post' но вот он если встречает одинаковые посты то выбирает со старой датой, а мне надо чтоб он выбирал с новой и ORDER BY здесь не помогает...

2

Re: GROUP BY и сортировка по дате

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

SELECT * FROM (SELECT * FROM `post_user` WHERE `id_post` = 1 ORDER BY `date` DESC) AS `tmp`
GROUP BY `id_post`

3

Re: GROUP BY и сортировка по дате

А другого способа нет? так как строк будет много например тыс 200-300

4

Re: GROUP BY и сортировка по дате

vanicon сказал:

А другого способа нет? так как строк будет много например тыс 200-300

Если есть условие WHERE `id_post` = 1, то должно работать нормально. А другой способ - это выбирать все строки отсортированные по дате и уже в скрипте выбирать первую с уникальным id_post.

В phpMyAdmin есть показатель времени выполнения запроса. Ориентируйтесь на него.

5

Re: GROUP BY и сортировка по дате

Можно ли отдать приоритет при выборке поля с ключом? Например если в строках с одинаковыми id_post в какой либо из строк  будет присутствовать поле с первичным ключом

6

Re: GROUP BY и сортировка по дате

vanicon сказал:

Можно ли отдать приоритет при выборке поля с ключом? Например если в строках с одинаковыми id_post в какой либо из строк  будет присутствовать поле с первичным ключом

Не думаю, что это возможно. Во всяком случае, до сих пор не встречался с такой выборкой.

7 (изменено: skillful, 2013-06-03 13:10:53)

Re: GROUP BY и сортировка по дате

SELECT * FROM (SELECT * FROM `post_user` WHERE `id_post` = 1 ORDER BY `date` DESC) AS `tmp`
GROUP BY `id_post`

А как в этот запрос добавить JOIN к таблице, например пользователей id_user

8

Re: GROUP BY и сортировка по дате

skillful сказал:

А как в этот запрос добавить JOIN к таблице, например пользователей id_user

Добавьте в подзапрос. Хотя в данном виде я не вижу необходимости в подзапросе.