PHP.SU

Программирование на PHP, MySQL и другие веб-технологии
PHP.SU Портал     На главную страницу форума Главная     Помощь Помощь     Поиск Поиск     Поиск Яндекс Поиск Яндекс     Вакансии  Пользователи Пользователи


 Страниц (1): [1]   

> Описание: Обратная сортировка с уникальными значениями
icitari
Отправлено: 09 Августа, 2017 - 21:34:55
Post Id


Новичок


Покинул форум
Сообщений всего: 3
Дата рег-ции: Авг. 2017  


Помог: 0 раз(а)




Здравствуйте. Нужна помощь.
Есть таблица: smf_messages
id_topic ......... poster_time
.... 1 ............. 1501966868
.... 1 ............. 1501966869
.... 2 ............. 1501966870
.... 3 ............. 1501966871
.... 2 ............. 1501966872
.... 1 ............. 1501966873
.... 4 ............. 1501966874


Нужно создать запрос mysql, что бы происходила сортировка поля poster_time (время) по убыванию а поле id_topic что бы не повторялось, то есть выбрать уникальные значения.

То есть должно получиться следующее:

id_topic ....................... poster_time
..... 4 .......................... 1501966874
..... 1 .......................... 1501966873
..... 2 .......................... 1501966872
..... 3 .......................... 1501966871
 
 Top
Vladimir Kheifets
Отправлено: 10 Августа, 2017 - 07:47:22
Post Id



Гость


Покинул форум
Сообщений всего: 127
Дата рег-ции: Март 2017  
Откуда: Германия, Бавария


Помог: 3 раз(а)




icitari пишет:
Здравствуйте. Нужна помощь.
Есть таблица: smf_messages
id_topic ......... poster_time
.... 1 ............. 1501966868
.... 1 ............. 1501966869
.... 2 ............. 1501966870
.... 3 ............. 1501966871
.... 2 ............. 1501966872
.... 1 ............. 1501966873
.... 4 ............. 1501966874


Нужно создать запрос mysql, что бы происходила сортировка поля poster_time (время) по убыванию а поле id_topic что бы не повторялось, то есть выбрать уникальные значения.

То есть должно получиться следующее:

id_topic ....................... poster_time
..... 4 .......................... 1501966874
..... 1 .......................... 1501966873
..... 2 .......................... 1501966872
..... 3 .......................... 1501966871


Доброе утро! Попробуйте так:
CODE (SQL):
скопировать код в буфер обмена
  1. SELECT id_topic, poster_time FROM smf_messages GROUP BY id_topic ORDER BY id_topic DESC
 
 Top
icitari
Отправлено: 10 Августа, 2017 - 08:42:37
Post Id


Новичок


Покинул форум
Сообщений всего: 3
Дата рег-ции: Авг. 2017  


Помог: 0 раз(а)




Доброе утро. Не получается, в данном случае сначала выбираются уникальные значения id_topic, а потом происходит сортировка по poster_time, то есть выведет что то вроде этого:

id_topic ......... poster_time
.... 4 ............. 1501966874
.... 3 ............. 1501966871
.... 2 ............. 1501966870
.... 1 ............. 1501966868

А необходимо, что бы сначала произошла сортировка по убыванию poster_time, а потом в таком же порядке (по убыванию poster_time) отобрались уникальные значения id_topic
 
 Top
Ch_chov
Отправлено: 10 Августа, 2017 - 09:35:06
Post Id



Постоянный участник


Покинул форум
Сообщений всего: 2120
Дата рег-ции: Июль 2008  
Откуда: из города


Помог: 87 раз(а)




CODE (SQL):
скопировать код в буфер обмена
  1. SELECT *
  2. FROM (SELECT * FROM smf_messages ORDER BY poster_time DESC) sub
  3. GROUP BY id_topic
  4. ORDER BY poster_time DESC


или

CODE (SQL):
скопировать код в буфер обмена
  1. SELECT id_topic, MAX(poster_time) poster_time
  2. FROM smf_messages
  3. GROUP BY id_topic
  4. ORDER BY poster_time DESC
 
 Top
icitari
Отправлено: 10 Августа, 2017 - 09:46:25
Post Id


Новичок


Покинул форум
Сообщений всего: 3
Дата рег-ции: Авг. 2017  


Помог: 0 раз(а)




Да, спасибо, подходит)))
(Добавление)
Цитата:
SELECT *
FROM (SELECT * FROM smf_messages ORDER BY poster_time DESC) sub
GROUP BY id_topic
ORDER BY poster_time DESC

Пожалуйста, подскажите, что здесь означает слово sub
 
 Top
Мелкий Супермодератор
Отправлено: 10 Августа, 2017 - 11:05:13
Post Id



Активный участник


Покинул форум
Сообщений всего: 11551
Дата рег-ции: Июль 2009  
Откуда: Россия, Санкт-Петербург


Помог: 561 раз(а)




Это алиас для таблицы подзапроса. И процитирован неправильный метод, используйте второй с использованием аггрегатной max.
Первый не будет работать ни во внятных СУБД ни в самом MySQL версии начиная с 5.7 без специальных правок sql_mode. И возможно вообще не будет в следующих релизах. Давно не читал relnotes к 8, что там уже выкидывают, а что пока только deprecated.


-----
PostgreSQL DBA
 
 Top
Страниц (1): [1]
Сейчас эту тему просматривают: 1 (гостей: 1, зарегистрированных: 0)
« SQL и Архитектура БД »


Все гости форума могут просматривать этот раздел.
Только зарегистрированные пользователи могут создавать новые темы в этом разделе.
Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.
 



Powered by PHP  Powered By MySQL  Powered by Nginx  Valid CSS  RSS

 
Powered by ExBB FM 1.0 RC1. InvisionExBB