Модераторы: LSD
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Получение набора записей по курсору 
:(
    Опции темы
polin11
Дата 29.12.2019, 15:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 70
Регистрация: 6.6.2015

Репутация: нет
Всего: нет



СУБД Postgresql есть таблица с городами и странами.

Код

CREATE TABLE T (
  id INTEGER,
  town_country VARCHAR (255),
  is_country bool
) ;--DEFAULT CHARSET=utf8 ;

INSERT INTO T
  (id, town_country, is_country)
VALUES
  (1, 'Франция', true),
  (2, 'Германия', true),
  (4, 'Россия',  true),
  (5, 'Канада', true),
  (6, 'Бельгия',  true),
  (7, 'Беларусь', true),
  (8, 'Австралия', true),
  (9, 'Япония', true),
  (10, 'Афины', null),
  (11, 'Брюссель', null),
  (12, 'Барселона', null)


Отсортированный список
Код

SELECT *
FROM T
ORDER BY
 is_country DESC NULLS LAST, 
 town_country ASC NULLS FIRST


Австралия
Беларусь
Бельгия
Германия
Канада
Россия
Франция
Япония
Афины 
Брюссель
Барселона
 
Нужно написать несколько запросов, которые возвращают по 5 записей из этого списка. 
Начиная со 2 запроса, нужно в условие запроса передать
последнюю запись, найденную в предыдущем запросе.


Первый запрос без условия:
Код

SELECT *
FROM T
ORDER BY
 is_country DESC NULLS LAST, 
 town_country ASC NULLS FIRST
LIMIT 5


Получаем набор, все ОК:
Австралия
Беларусь
Бельгия
Германия
Канада

https://www.db-fiddle.com/f/SpTXQTSprkMr3syfk6DSE/0


Берем последнюю запись - Канада, нужно получить следующие 5 записей, которые 
находятся в списке под Канадой, например так

Второй запрос:
Код

SELECT *
FROM T
where town_country > 'Канада'
ORDER BY
 is_country DESC NULLS LAST, 
 town_country ASC NULLS FIRST
 LIMIT 5

 
https://www.db-fiddle.com/f/39cbZdNmr4HzVzsS1mnfxy/0

Проблема:  возвращается только 3 записи (Россия, Франция, Япония), из-за использования сортировки
is_country DESC NULLS LAST

Третим запросом нужно вернуть одну запись:
Барселона 


Как правильно написать 2 и 3 запросы, оставив такую сортировку,
во второй запрос нужно использовать последнюю запись из 1 запроса, 
в 3 запрос нужно использовать последнюю запись из 2 запроса?

PM MAIL   Вверх
Akina
Дата 29.12.2019, 21:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Советчик
****


Профиль
Группа: Модератор
Сообщений: 20437
Регистрация: 8.4.2004
Где: Зеленоград

Репутация: 3
Всего: 449



Детский вопрос - из кольцевого списка выбрать заданное количество элементов списка последовательно заданное количество раз. Обычное деление с остатком.


--------------------
 О(б)суждение моих действий - в соответствующей теме, пожалуйста. Или в РМ. И высшая инстанция - Администрация форума.

PM MAIL WWW ICQ Jabber   Вверх
polin11
Дата 29.12.2019, 21:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 70
Регистрация: 6.6.2015

Репутация: нет
Всего: нет



Попробую понятней описать проблему:

1) При первом вызове метода не передают параметры, метод возвращает 5 записей:
Австралия
Беларусь
Бельгия
Германия
Канада

2) При следующем вызове метода передают последнюю запись из пред. вызова(Канада), мне нужно вернуть следующие 5 записей из списка, находящиеся под Канадой. Я не знаю второй это вызов, третий или четвертый.  У меня просто есть запись - курсор (последняя запись из пред. вызова) 

 Вопрос как написать  такие запросы?

PM MAIL   Вверх
Akina
Дата 29.12.2019, 22:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Советчик
****


Профиль
Группа: Модератор
Сообщений: 20437
Регистрация: 8.4.2004
Где: Зеленоград

Репутация: 3
Всего: 449



Фигня. При КАЖДОМ вызове в запрос передаётся параметр - порядковый номер вызова. Если не передан - первый. Всё. А дальше, как я сказал выше, кольцо и деление с остатком.


--------------------
 О(б)суждение моих действий - в соответствующей теме, пожалуйста. Или в РМ. И высшая инстанция - Администрация форума.

PM MAIL WWW ICQ Jabber   Вверх
LSD
Дата 30.12.2019, 18:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Leprechaun Software Developer
****


Профиль
Группа: Модератор
Сообщений: 15666
Регистрация: 24.3.2004

Репутация: 3
Всего: 534



Цитата(polin11 @  29.12.2019,  22:50 Найти цитируемый пост)
Вопрос как написать  такие запросы?

Запросом такого не сделать, но можно написать процедуру которая будет сохранять номер последней прочитанной записи.

Но тут есть большой вопрос в архитектуре всего приложения: что делать если приложение упало и не успело запроцессить все записи которые ей вернул запрос?



--------------------
Disclaimer: this post contains explicit depictions of personal opinion. So, if it sounds sarcastic, don't take it seriously. If it sounds dangerous, do not try this at home or at all. And if it offends you, just don't read it.
PM MAIL WWW   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | PostgreSQL | Следующая тема »


 




[ Время генерации скрипта: 0.1232 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.