|
|
|
| Доброго времени суток!
Задача заключается в следующем
есть таблица
View
необходимо вывести последних 10 записей отсортировав их по времени добавления с уникальными idSites
запрос выглядит так
SELECT `idSites` FROM `View` GROUP BY `idSites` ORDER BY `timeView` DESC LIMIT 10
|
результат запроса: выводит idSites по убыванию, а требовалось вывести idSites по времени просмотра в убывании | |
|
|
|
|
|
|
|
для: Besenok
(20.06.2010 в 21:58)
| | После группировки сортировать можно только по группируемым полям (можно = имеет смысл). По полю `timeView` группировки не было, значит и сортировка ничего хорошего не даст (большинство СУБД не допускают таких абсурдных запросов).
Насчёт уникальности, пример:
idSites | timeView
1 | 23:15:02
3 | 23:15:13
4 | 23:15:19
2 | 23:15:38
3 | 23:15:55
Какой должен быть порядок? 1, 3, 4, 2 или 1, 4, 2, 3?
"время добавления", "время просмотра" и `timeView` - это одно и тоже? | |
|
|
|
|
|
|
|
для: sms-send
(20.06.2010 в 23:42)
| | Порядок должен быть 3, 2, 4, 1 | |
|
|
|
|
|
|
|
для: Besenok
(21.06.2010 в 00:33)
| | То есть для дублирующегося `idSites` для сортировки выбирать наиболее позднее значение `timeView`?
SELECT `idSites`, MAX(`timeView`) AS `lastTimeView`
FROM `View`
GROUP BY `idSites`
ORDER BY `lastTimeView` DESC
LIMIT 10
|
| |
|
|
|
|
|
|
|
для: sms-send
(20.06.2010 в 23:42)
| | >После группировки сортировать можно только по группируемым полям (можно = имеет смысл).
Не имеет смысл, а именно можно.
Правда, можно еще по результатам агрегатных функций над оставшимися полями. | |
|
|
|
|
|
|
|
для: Trianon
(21.06.2010 в 10:49)
| | > Не имеет смысл, а именно можно.
Но ведь MySQL допускает запросы с группировкой по одним полям и выборкой/сортировкой по другим, без их агрегирования. А смысл может появиться, например, в таком запросе:
SELECT `u`.`id`, `u`.`login`, COUNT(`messages`.*) AS `count`
FROM `users` AS `u` LEFT OUTER JOIN `messages` AS `m` ON `u`.`id`=`m`.`user`
GROUP BY `u`.`id`
ORDER BY `u`.`login`
|
Где `users`.`id` - первичный ключ, `users`.`login` - поле с уникальным ключём. То есть при группировке по `users`.`id` в каждый ряд конкретной группы попадут заведомо одинаковые `users`.`login`
Можно, конечно, добавить группировку по полю `login`, что будет и по смыслу и по факту пустой операцией. | |
|
|
|
|
|
|
|
для: sms-send
(21.06.2010 в 18:14)
| | Мало мальски приличный SQL-сервер такой запрос отвергнет, как ошибочный.
Так что и за ради переносимости, и за ради хорошего тона, я бы такие запросы допустимыми не расценивал. | |
|
|
|