|
Как получить порядковый номер (но не ID) в запросе с ORDER BY
|
|||
---|---|---|---|
#18+
Добрый день, Подскажите новичку: Допустим есть простая таблица: Код: sql 1. 2. 3. 4. 5. 6. 7.
И в ней много (скажем миллион) записей. Для отображения таблицы используется простая пагинация через OFFSET x LIMIT 500. В чем сложность: если пользователь добавил новую запись нужно поместить на нее курсор в гриде, а для этого нужно знать порядковый номер добавленной записи чтобы понять на какой странице она находится и сформировать корректный OFFSET/LIMIT. Если таблица отсортирована по ID то все понятно - новая запись будет на последней странице. Но что если пользователь перед добавлением записи выбрал сортировку по полю Name ? Как в этом случае понять на какой странице она находится т.е. какое смещение должно быть в OFFSET ? А если выбрана сортировка по двум полям - ORDER BY Name, City - как понять на какой странице должна быть добавленная запись без перебора всего запроса ? Грубо говоря, нужно получить COUNT (*) числа записей, которые находятся ДО вновь добавленной с учетом сортировки по полям. Спасибо за помощь ! ... |
|||
:
Нравится:
Не нравится:
|
|||
18.09.2016, 17:48 |
|
Как получить порядковый номер (но не ID) в запросе с ORDER BY
|
|||
---|---|---|---|
#18+
amsdev А если выбрана сортировка по двум полям - ORDER BY Name, City - как понять на какой странице должна быть добавленная запись без перебора всего запроса ?Грид и таблица это две совершенно разные сущности. Абсолютно не важно как отсортирован грид, вставка будет всегда в таблицу. Ты никогда не добавляешь запись ни в грид, ни на какую-то страницу, ты добавляешь ее в таблицу. amsdevГрубо говоря, нужно получить COUNT (*) числа записей, которые находятся ДО вновь добавленной с учетом сортировки по полям.А в чем проблема? Пользователь добавил запись с новым именем и сортировка идет по имени: select count() from list where name<'johnny' Теперь делишь полученное число на сколько записей входит в твою страницу и вот у тебя номер страницы. Аналогично и с городами и с идентификаторами и со всем остальным. Простой поиск по полю в условиях постраничного грида. ... |
|||
:
Нравится:
Не нравится:
|
|||
18.09.2016, 19:50 |
|
Как получить порядковый номер (но не ID) в запросе с ORDER BY
|
|||
---|---|---|---|
#18+
авторА в чем проблема? Пользователь добавил запись с новым именем и сортировка идет по имени: select count() from list where name<'johnny' Проблема в том, что поле может и не иметь значения. Т.е., к примеру, была сортировка по полю City и при этом в новой записи Name задан, а Сity - нет. В этой связи делать поиск по City<Moscow не получится. Кроме того, сортировка может быть одновременно более чем по одному полю и с разным направлением: Например ORDER BY Name Asc, City Desc Я думаю, кроме перебора всех записей не получится найти страницу ( ... |
|||
:
Нравится:
Не нравится:
|
|||
22.09.2016, 13:59 |
|
Как получить порядковый номер (но не ID) в запросе с ORDER BY
|
|||
---|---|---|---|
#18+
amsdevПроблема в том, что поле может и не иметь значения. Т.е., к примеру, была сортировка по полю City и при этом в новой записи Name задан, а Сity - нет. В этой связи делать поиск по City<Moscow не получится. Поле по которому включена сортировка в гриде не имеет значения в новой записи... Ну а в других, более важных полях она записи имеет? Хотя бы ID? Ты вообще можешь найти в базе свежедобавленную запись? Намек: почитай про AUTOINCREMENT amsdevКроме того, сортировка может быть одновременно более чем по одному полю и с разным направлением: Например ORDER BY Name Asc, City DescИ? Код: sql 1. 2.
а для пустого города: Код: sql 1. 2.
И делай себе соответствующие условия больше-меньше или null в зависимости от того какая там у тебя сортировка включена и что в искомой строке задано. amsdevЯ думаю, кроме перебора всех записей не получится найти страницу (Ну если сильно хочешь, то можешь конечно и перебирать... Пользователи будут ворчать и плеваться, но это их проблемы, правда? ... |
|||
:
Нравится:
Не нравится:
|
|||
22.09.2016, 19:29 |
|
|
start [/forum/topic.php?fid=54&msg=39313424&tid=2008571]: |
0ms |
get settings: |
10ms |
get forum list: |
13ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
42ms |
get topic data: |
12ms |
get forum data: |
3ms |
get page messages: |
49ms |
get tp. blocked users: |
2ms |
others: | 15ms |
total: | 154ms |
0 / 0 |