|
Возможна ли такая выборка?
|
|||
---|---|---|---|
#18+
Почти пятничная тема. Экспериментирую. Есть табля Код: sql 1. 2. 3. 4. 5. 6. 7.
На клиенте (дабы избежать полного фетча) мне надо получить определенное кол-во записей так, чтобы запись с определенным ID визуально отображалась в середине выборки. Примерно так (ID=40) Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10.
Данные на клиента фетчатся в n-заходов (в тесте в меморидатасет или VTV в доп.потоке), поэтому запрос может варьировать без ограничения фантазии (условно говоря, нужно получить запись по ID с 36 по 39 + 40 + с 41 по 45). Хотел узнать, можно ли проделать то же самое, но если сортировка будет осуществляться по любому другому полю. Это возможно принципиально ? Или есть другой путь? Был бы благодарен за любые советы и конструктивную критику. зы. тестовый скрипт приаатачил ================= Док. Win7 Ultim x64/Deb 9.2(GNOME, MATE; gtk2) i386: FB 3.0.2.32703, диалект 3, SS, Lazarus 1.9(r.57265); FPC 3.1.1 (r.38477), IBX by -Rik-; IBE 2017.4.19.2 ... |
|||
:
Нравится:
Не нравится:
|
|||
16.03.2018, 08:47 |
|
Возможна ли такая выборка?
|
|||
---|---|---|---|
#18+
Я вот так делал Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32.
... |
|||
:
Нравится:
Не нравится:
|
|||
16.03.2018, 09:58 |
|
Возможна ли такая выборка?
|
|||
---|---|---|---|
#18+
Док, обычно такие вещи делаются без skip Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10.
для того чтобы запись была посередине придётся делать примерно как показал slay2012 С сортировкой по другим полями тоже можно, но только если одновременно есть сортировка по ID, ну и запрос усложняется Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10.
... |
|||
:
Нравится:
Не нравится:
|
|||
16.03.2018, 10:16 |
|
Возможна ли такая выборка?
|
|||
---|---|---|---|
#18+
slay2012, а разве это не эквивалент where Код: sql 1. 2. 3.
? ... |
|||
:
Нравится:
Не нравится:
|
|||
16.03.2018, 10:16 |
|
Возможна ли такая выборка?
|
|||
---|---|---|---|
#18+
Док, нет конечно. ID может быть с пропусками ... |
|||
:
Нравится:
Не нравится:
|
|||
16.03.2018, 10:18 |
|
Возможна ли такая выборка?
|
|||
---|---|---|---|
#18+
ДокХотел узнать, можно ли проделать то же самое, но если сортировка будет осуществляться по любому другому полю. Это возможно принципиально ? Или есть другой путь? Был бы благодарен за любые советы и конструктивную критику.Сортировка "по любому полю" делается на клиенте, а при изменении сортировки у тебя в выборке может не оказаться тех строк по краям центральной строки, которые реально присутствуют в таблице, но которые ты не отфетчил. Вижу только один вариант - константные режимы сортировки, реализованные в хранимой процедуре выборки. ... |
|||
:
Нравится:
Не нравится:
|
|||
16.03.2018, 10:23 |
|
Возможна ли такая выборка?
|
|||
---|---|---|---|
#18+
rdb_devСортировка "по любому полю" делается на клиенте вот тоже подумалось уже после стартового поста. ... |
|||
:
Нравится:
Не нравится:
|
|||
16.03.2018, 10:35 |
|
Возможна ли такая выборка?
|
|||
---|---|---|---|
#18+
Докrdb_devСортировка "по любому полю" делается на клиентевот тоже подумалось уже после стартового поста.У тебя там не так много полей и, возможно, тебе придется реализовать в одной хранимой процедуре 3 - 4 выборки по константным режимам сортировки. Иными словами, помимо ID, тебе придется передавать в ХП еще и режим сортировки, ну и в реализации этой ХП, копипастой нареализовывать код с заменой поля или списка полей в предложении ORDER BY. ... |
|||
:
Нравится:
Не нравится:
|
|||
16.03.2018, 11:08 |
|
Возможна ли такая выборка?
|
|||
---|---|---|---|
#18+
rdb_devСортировка "по любому полю" делается на клиентЕсли не тянуть на клиента всю таблицу, то - нет, не делается. Ибо нужно отсортировать и выбрать часть записей. Что ты будешь сортировать на клиенте по name, когда выбрал записи, опираясь на ID ? ... |
|||
:
Нравится:
Не нравится:
|
|||
16.03.2018, 11:44 |
|
Возможна ли такая выборка?
|
|||
---|---|---|---|
#18+
У меня есть процедура str_to_id, в которую передается список id через запятую, в том же порядке и выдаеются. Left join с главной таблицей сортировка уже определена ... |
|||
:
Нравится:
Не нравится:
|
|||
16.03.2018, 11:59 |
|
Возможна ли такая выборка?
|
|||
---|---|---|---|
#18+
Док, правда, есть еще два варианта: 1. Через функцию sprintf (C/C++) формировать на клиенте EXECUTE BLOCK с запросами и требуемым порядком сортировки. Как-то так: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37. 38. 39. 40. 41. 42. 43.
и, наконец, sprintf. Например, для порядка сортировки по строке и дате (STR_FLD, DATE_FLD): Код: plaintext 1. 2.
2. Либо, схожим образом использовать EXECUTE STATEMENT...INTO в хранимой процедуре - собирая запрос из кусков и распарсив строковый параметр с полями порядка сортировки. ... |
|||
:
Нравится:
Не нравится:
|
|||
16.03.2018, 12:51 |
|
Возможна ли такая выборка?
|
|||
---|---|---|---|
#18+
В такой реализации, при некоторых условиях, возможен маленький косячок, поэтому, лучше так: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37. 38. 39. 40. 41. 42. 43. 44. 45. 46. 47. 48. 49.
sprintf для порядка сортировки по строке и дате (STR_FLD, DATE_FLD): Код: plaintext 1. 2.
... |
|||
:
Нравится:
Не нравится:
|
|||
16.03.2018, 13:03 |
|
Возможна ли такая выборка?
|
|||
---|---|---|---|
#18+
rdb_dev, аж кровь из глаз брызнула. ... |
|||
:
Нравится:
Не нравится:
|
|||
16.03.2018, 13:24 |
|
Возможна ли такая выборка?
|
|||
---|---|---|---|
#18+
kdv, от "\r\n"? Зато в трассировке и MON$SQL_TEXT будет форматированный запрос. ... |
|||
:
Нравится:
Не нравится:
|
|||
16.03.2018, 13:34 |
|
Возможна ли такая выборка?
|
|||
---|---|---|---|
#18+
Док(дабы избежать полного фетча) Чисто из любопытства: а что у вас за проблема с полным фетчем? Posted via ActualForum NNTP Server 1.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
16.03.2018, 13:35 |
|
Возможна ли такая выборка?
|
|||
---|---|---|---|
#18+
Dimitry SibiryakovЧисто из любопытства: а что у вас за проблема с полным фетчем? "мы тут посоветовались" © Я чисто эмпирически попытался замерить время полного фетча с сортировкой по ID этой табли с 400К записями. Получилось на клиенте что-то около 20-23 сек (в IBE около 15-16 сек). И это на локалке. При таком раскладе мне либо логику отображения записей в приложении менять надо (сейчас на морде классическая таблица со списком пациентов со сортировкой по времени последнего посещения), либо искать проктостоматологические способы фетча ограниченного кол-ва записей. Ибо есть у меня мысли еще попробовать тягать записи с удаленной базы через инет, если это возможно Пока в поисках и раздумье ... ... |
|||
:
Нравится:
Не нравится:
|
|||
16.03.2018, 17:36 |
|
Возможна ли такая выборка?
|
|||
---|---|---|---|
#18+
ДокПри таком раскладе мне либо логику отображения записей в приложении менять надо (сейчас на морде классическая таблица со списком пациентов со сортировкой по времени последнего посещения), Таки да, стоит эту логику немного осмыслить. Поскольку с сортировкой по времени последнего посещения она как-то не согласуется с изначальной постановкой "чтобы запись с определенным ID визуально отображалась в середине выборки". И даже в начальной постановке лично я бы не считал фоновый фетч двух запросов в двух направлениях "излишне проктостоматологическим". Может выглядеть страшно на первый взгляд, но это забавное упражнение на программирование. Posted via ActualForum NNTP Server 1.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
16.03.2018, 18:00 |
|
Возможна ли такая выборка?
|
|||
---|---|---|---|
#18+
Dimitry Sibiryakov, кстати, если бы разработчики FirebirdSQL в следующей версии (или в каком-нибудь минорном релизе "четвёрки") реализовали запрос на изменение CORE-5583 , то можно было бы, ко всему прочему, реализовывать подобие постоянных (в пределах транзакции) серверных курсоров партионной выборкой клиентом. ... |
|||
:
Нравится:
Не нравится:
|
|||
17.03.2018, 14:18 |
|
Возможна ли такая выборка?
|
|||
---|---|---|---|
#18+
rdb_dev, тикет полная лабуда. В таком виде как он описан шансы близки к нулю ... |
|||
:
Нравится:
Не нравится:
|
|||
17.03.2018, 15:38 |
|
Возможна ли такая выборка?
|
|||
---|---|---|---|
#18+
Симонов Денис, у меня с англ. не очень... ... |
|||
:
Нравится:
Не нравится:
|
|||
17.03.2018, 15:40 |
|
Возможна ли такая выборка?
|
|||
---|---|---|---|
#18+
rdb_dev, почитал. замечу, что вначале надо научиться изъясняться на родном языке, а уже потом переводить это на другой язык. Особенно показателен в этом плане Hommer - его request про регистр идентификаторов прямо-таки требовательный, что непривычно для англоязычной аудитории. Мы тут дубинками размахиваем, и выражаемся, и все такое, но ТАМ это не принято, люди просто не понимают такую интонацию (вероятно пока, через пару лет, видимо, тоже научатся, благодаря собственным дипломатам). ... |
|||
:
Нравится:
Не нравится:
|
|||
17.03.2018, 18:00 |
|
Возможна ли такая выборка?
|
|||
---|---|---|---|
#18+
Док Ибо есть у меня мысли еще попробовать тягать записи с удаленной базы через инет, если это возможно Пока в поисках и раздумье ... Настоятельно рекомендую реплицировать через некий центральный узел справочник пациентов и аккумулировать на нём же оперативные данные о посещениях. Справочник по логике вещей должен быть относительно стабилен, а оперативку опять же по логике вещей должно быть вполне допустимо фетчить в начале сеанса работы с этого центра. Миксить всё это добро в какое-нибудь in-memory-table и сортировать её на клиенте хоть по диагонали каждые полминуты. Я пользовал для этого клиентдасет, удобно. Позиционирование после сортировки - вообще не вопрос. При работе по сети всё упирается в символьные поля, данные - фигня по сравнению с ними, и их лучше реплицировать. Я начинал с целиковых запросов от сателлитов к центру, когда перешёл на эту схему, получил ускорение в 45 раз. ... |
|||
:
Нравится:
Не нравится:
|
|||
17.03.2018, 18:54 |
|
Возможна ли такая выборка?
|
|||
---|---|---|---|
#18+
kdv, на родном языке гораздо проще, так как можно позволить себе расписать на несколько страниц в подробностях, а там RFC, да еще и по аглицки. Если бы я перевёл русскую "партянку" через "гугель перекладач", было бы еще хуже. ... |
|||
:
Нравится:
Не нравится:
|
|||
17.03.2018, 19:32 |
|
Возможна ли такая выборка?
|
|||
---|---|---|---|
#18+
rdb_dev, я читая английский текст и так вижу что с родным как раз "не очень", а не "гораздо проще". Именно поэтому и упомянул, что "сначала лучше бы на родном". А если есть годное предложение, нет никаких проблем помочь перевести. К слову, у буржуев не случайно принято месседжи оформлять в 10 слов, 25 слов, 50 слов и т.д. ... |
|||
:
Нравится:
Не нравится:
|
|||
17.03.2018, 19:50 |
|
|
start [/forum/topic.php?fid=40&fpage=35&tid=1561199]: |
0ms |
get settings: |
10ms |
get forum list: |
14ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
40ms |
get topic data: |
14ms |
get forum data: |
3ms |
get page messages: |
59ms |
get tp. blocked users: |
2ms |
others: | 13ms |
total: | 163ms |
0 / 0 |