Перейти к содержимому



  • Закрытая тема Тема закрыта

Запрос с лимитом

#1 gaaarfild

gaaarfild
  • Неактивные
  • 596 сообщений
  • Репутация: 0
0

Отправлено 10 Март 2010 - 04:06

Например есть определенная таблица, в которую записываются авторы, дата публикации, ID.

Как сделать запросто последних двух публикация, но, чтобы они были от разных авторов?

 

 

  • 0

robot

robot
  • Пользователь PRO
  • 2 652 сообщений
  • Репутация: 85
Советую обратить внимание на следующее:
  1. Вывод с условием
  2. Выбрать строку с максимальным значением в одном из полей
  3. Обращение к разным таблицам из базы
  4. PHP + сложный запрос в PostgeSQL
  5. Помогите, нужно вывести в топ запрос!

#2 ZiTosS

ZiTosS
  • Неактивные
  • 5 148 сообщений
  • Репутация: 8

Отправлено 10 Март 2010 - 23:33

gaaarfild,
SELECT `*` FROM (SELECT `*` FROM `publications` ORDER BY `date` DESC) `t1` GROUP BY(`author`) ORDER BY `date` DESC LIMIT 2

И так, что мы делаем:
ОТОБРАТЬ все поля ИЗ (ОТОБРАТЬ все поля ИЗ `публикации` ОТСОРТИРОВАТЬ по полю `дата публикации` в ОБРАТНОМ ПОРЯДКЕ) это есть КУРСОР `t1` СГРУППИРОВАТЬ по `автор` ОТСОРТИРОВАТЬ по полю `дата публикации` в ОБРАТНОМ ПОРЯДКЕ и ВЗЯТЬ ТОЛЬКО 2

Курсор есть ничто иное, как временная таблица, сформированная по каким-то нужным нам условиям и отсортированная в нужном порядке.
То есть мы можем работать с курсором как с таблицей. Можем обращаться к его столбцам и так далее. Всё тоже самое.
  • 0

#3 gaaarfild

gaaarfild
    Topic Starter
  • Неактивные
  • 596 сообщений
  • Репутация: 0

Отправлено 11 Март 2010 - 06:19

Благодарен по уши! =)
  • 0

#4 ZiTosS

ZiTosS
  • Неактивные
  • 5 148 сообщений
  • Репутация: 8

Отправлено 11 Март 2010 - 20:38

gaaarfild, Всегда рад помочь. Вроде корректно работает, но до пущей условности:
SELECT `test.*` FROM `test`, (SELECT `author`, max(`date`) as `sort` FROM `test` GROUP BY(`author`) ORDER BY `date`) `t1` WHERE `test.author`=`t1.author` AND `test.date` =` t1.sort` ORDER BY `sort` LIMIT 2

  • 0


Оформление форума – IPBSkins.ru