Гость
Форумы / SQLite [игнор отключен] [закрыт для гостей] / Как получить порядковый номер (но не ID) в запросе с ORDER BY / 4 сообщений из 4, страница 1 из 1
18.09.2016, 17:48
    #39311027
amsdev
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как получить порядковый номер (но не ID) в запросе с ORDER BY
Добрый день,

Подскажите новичку:

Допустим есть простая таблица:

Код: sql
1.
2.
3.
4.
5.
6.
7.
CREATE TABLE List (
    ID                 INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL,
    Name             VARCHAR (100),
    City               VARCHAR(100))

CREATE INDEX NameIdx ON List (Name);
CREATE INDEX CityIdx ON List (City);



И в ней много (скажем миллион) записей. Для отображения таблицы используется простая пагинация через OFFSET x LIMIT 500.

В чем сложность: если пользователь добавил новую запись нужно поместить на нее курсор в гриде, а для этого нужно знать порядковый номер добавленной записи чтобы понять на какой странице она находится и сформировать корректный OFFSET/LIMIT.

Если таблица отсортирована по ID то все понятно - новая запись будет на последней странице. Но что если пользователь перед добавлением записи выбрал сортировку по полю Name ? Как в этом случае понять на какой странице она находится т.е. какое смещение должно быть в OFFSET ? А если выбрана сортировка по двум полям - ORDER BY Name, City - как понять на какой странице должна быть добавленная запись без перебора всего запроса ?

Грубо говоря, нужно получить COUNT (*) числа записей, которые находятся ДО вновь добавленной с учетом сортировки по полям.

Спасибо за помощь !
...
Рейтинг: 0 / 0
18.09.2016, 19:50
    #39311052
White Owl
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как получить порядковый номер (но не ID) в запросе с ORDER BY
amsdev А если выбрана сортировка по двум полям - ORDER BY Name, City - как понять на какой странице должна быть добавленная запись без перебора всего запроса ?Грид и таблица это две совершенно разные сущности. Абсолютно не важно как отсортирован грид, вставка будет всегда в таблицу. Ты никогда не добавляешь запись ни в грид, ни на какую-то страницу, ты добавляешь ее в таблицу.

amsdevГрубо говоря, нужно получить COUNT (*) числа записей, которые находятся ДО вновь добавленной с учетом сортировки по полям.А в чем проблема?
Пользователь добавил запись с новым именем и сортировка идет по имени:
select count() from list where name<'johnny'
Теперь делишь полученное число на сколько записей входит в твою страницу и вот у тебя номер страницы.
Аналогично и с городами и с идентификаторами и со всем остальным. Простой поиск по полю в условиях постраничного грида.
...
Рейтинг: 0 / 0
22.09.2016, 13:59
    #39313424
amsdev
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как получить порядковый номер (но не ID) в запросе с ORDER BY
авторА в чем проблема?
Пользователь добавил запись с новым именем и сортировка идет по имени:
select count() from list where name<'johnny'

Проблема в том, что поле может и не иметь значения. Т.е., к примеру, была сортировка по полю City и при этом в новой записи Name задан, а Сity - нет. В этой связи делать поиск по City<Moscow не получится.

Кроме того, сортировка может быть одновременно более чем по одному полю и с разным направлением:

Например ORDER BY Name Asc, City Desc

Я думаю, кроме перебора всех записей не получится найти страницу (
...
Рейтинг: 0 / 0
22.09.2016, 19:29
    #39313716
White Owl
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как получить порядковый номер (но не ID) в запросе с ORDER BY
amsdevПроблема в том, что поле может и не иметь значения. Т.е., к примеру, была сортировка по полю City и при этом в новой записи Name задан, а Сity - нет. В этой связи делать поиск по City<Moscow не получится.
Поле по которому включена сортировка в гриде не имеет значения в новой записи... Ну а в других, более важных полях она записи имеет? Хотя бы ID? Ты вообще можешь найти в базе свежедобавленную запись? Намек: почитай про AUTOINCREMENT

amsdevКроме того, сортировка может быть одновременно более чем по одному полю и с разным направлением:

Например ORDER BY Name Asc, City DescИ?
Код: sql
1.
2.
select count(*) from table
where Name < 'jonny' and City > 'Moscow'



а для пустого города:
Код: sql
1.
2.
select count(*) from table
where Name < 'jonny' and City is null

И делай себе соответствующие условия больше-меньше или null в зависимости от того какая там у тебя сортировка включена и что в искомой строке задано.

amsdevЯ думаю, кроме перебора всех записей не получится найти страницу (Ну если сильно хочешь, то можешь конечно и перебирать... Пользователи будут ворчать и плеваться, но это их проблемы, правда?
...
Рейтинг: 0 / 0
Форумы / SQLite [игнор отключен] [закрыт для гостей] / Как получить порядковый номер (но не ID) в запросе с ORDER BY / 4 сообщений из 4, страница 1 из 1
Целевая тема:
Создать новую тему:
Автор:
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]