Гость
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / Направление сортировки / 25 сообщений из 27, страница 1 из 2
23.08.2019, 14:17
    #39853260
Exteris
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Направление сортировки
Можно как-то сделать направление сортировки в зависимости от параметра?
Попробовал так -
Код: sql
1.
Order by case when :DATA=1 then s.dataexpto asc when :DATA=2 then s.dataexpto desc end


Не проканало.

Всех с пятницей!
...
Рейтинг: 0 / 0
23.08.2019, 14:19
    #39853262
Dimitry Sibiryakov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Направление сортировки
На клиенте это будет удобнее.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
23.08.2019, 14:21
    #39853264
Exteris
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Направление сортировки
Да на клиенте легко. Подумал, мож есть какая фича(костыль), о которых не знаю.
...
Рейтинг: 0 / 0
23.08.2019, 14:26
    #39853270
DarkMaster
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Направление сортировки
Exteris,

Код: plsql
1.
2.
3.
4.
 sql='select .....';
 if (data=1) then sql=sql||'.... asc ';
 else sql=sql||'.... desc ';
 for execute statement :sql into .... do ....
...
Рейтинг: 0 / 0
23.08.2019, 14:44
    #39853288
Exteris
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Направление сортировки
О, вот и костыль, спасибо.))
...
Рейтинг: 0 / 0
23.08.2019, 15:06
    #39853296
court
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Направление сортировки
Код: sql
1.
2.
3.
4.
...
Order by 
    case when :DATA=1 then s.dataexpto end asc 
    ,case when :DATA=2 then s.dataexpto end desc 
...
Рейтинг: 0 / 0
23.08.2019, 15:22
    #39853302
hvlad
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Направление сортировки
Exteris,

Код: sql
1.
2.
3.
4.
5.
order by 
        case 
            when :DATA=1 then DATEDIFF(day, s.dataexpto, date '01-01-1900') 
            when :DATA=2 then DATEDIFF(day, date '2100-01-01', s.dataexpto)
        end
...
Рейтинг: 0 / 0
23.08.2019, 17:32
    #39853391
Arioch
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Направление сортировки
Exteris,

домножай значение, приведённое к числу, на плюс единицу или минус единицу (параметр) и сортируй по результату :-)
...
Рейтинг: 0 / 0
23.08.2019, 17:35
    #39853392
Arioch
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Направление сортировки
кстати, хорошо бы оптимизатор умел применять индексы по выражениям для order by column * :Param - ибо параметр тут для запроса константа
...
Рейтинг: 0 / 0
23.08.2019, 19:01
    #39853413
kdv
kdv
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Направление сортировки
Arioch,

я уже лет двадцать точно вижу обсуждения типа
"а почему бы не сделать в SQL что-то вроде
select :param1 from :param2 where :param3 order by :param4 :param5 ?"

А в :param писать списки, и т.д.
...
Рейтинг: 0 / 0
26.08.2019, 11:11
    #39853675
Ivan_Pisarevsky
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Направление сортировки
ExterisО, вот и костыль, спасибо.))Там обрыв. Не, оно вестимо сработает, только будет доп коннект самого на себя, пойдут лесом депенденсы. Короче для сворачивания шеи вполне достаточно, идти туда можно если ну ОЧЕНЬ хочется.

Помножить на "-1 " зело проще.

Когда встречаю подобный фарш у себя устраиваю разбор полетов с переписыванием.
...
Рейтинг: 0 / 0
26.08.2019, 13:49
    #39853722
Arioch
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Направление сортировки
kdv,

ну причёт тут списки?

функции y=x и y=-x - две очень узко определённых случая, которые к спискам никак не относятся.
...
Рейтинг: 0 / 0
26.08.2019, 19:06
    #39853872
Arioch
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Направление сортировки
...
Рейтинг: 0 / 0
26.08.2019, 19:41
    #39853883
hvlad
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Направление сортировки
Arioch,

продолжаем кормить трекер какой-то хренью (я вообще не понял что там написано)
дабы потом снова обиженно заявлять о том, как ленивые разработчики не любят
своих пользователей и как они там вообще зазвездились и не бросились делать
такую охренительную фичу
...
Рейтинг: 0 / 0
27.08.2019, 00:30
    #39853963
kdv
kdv
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Направление сортировки
Arioch,

жалко что в трекере нет опции "развидеть".

p.s. ё-моё, ну вы серьезно хотите ASC/DESC через параметр? ядреный стыд...
...
Рейтинг: 0 / 0
27.08.2019, 06:59
    #39853979
Exteris
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Направление сортировки
Ivan_PisarevskyExterisО, вот и костыль, спасибо.))Там обрыв. Не, оно вестимо сработает
У меня тип поля - дата. Так что вариант Влада подошел.
А вообще да, проще на клиенте. Но пока нет возможности его обновить.
...
Рейтинг: 0 / 0
27.08.2019, 11:49
    #39854108
Arioch
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Направление сортировки
kdv,

чем это по сути отличается от ....WHERE ID = 1 через параметр?

а тем более, от ....WHERE ID = 1 OR 1 IS NULL через параметр?

кроме того, что одно Firebird уже умеет и все привыкли, а другое - ещё нет и все привыкли

-------

hvladя вообще не понял

печально

полноценную поддержку сортировки по подходящему индексу запросов типа select .... order by ? * (field1+field2), и как частный случай select .... order by ? * field1
...
Рейтинг: 0 / 0
27.08.2019, 13:41
    #39854176
kdv
kdv
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Направление сортировки
Ariochполноценную поддержку сортировки по подходящему индексу запросов типа select .... order by ? * (field1+field2), и как частный случай select .... order by ? * field1

* - это что?
что такое order by ? (field1+field2) ?
что значит "полноценная поддержка сортировки"? order by не использует "подходящие индексы"? Что тогда такое "подходящие индексы"?
...
Рейтинг: 0 / 0
27.08.2019, 13:48
    #39854182
Arioch
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Направление сортировки
это умножение, такая операция арифметическая

order by - это указание отсортировать результат выборки в стандарте SQL

(field1+field2) - это пример арифметического выражения, использующего поля таблицы ("field" по-английски "поле"). Причём, одной и той же таблицы оба поля, потому что не указаны ни алиасы таблиц ни их названия.

> order by не использует "подходящие индексы"?

когда как

select * from t2 order by id
PLAN (T2 ORDER PK_T2)

select * from t2 order by id desc
PLAN SORT ((T2 NATURAL))

select * from t2 order by cast (:direction as integer) * id -- параметр равен +1
PLAN SORT ((T2 NATURAL)) -- а лучше бы было PLAN (T2 ORDER PK_T2)
...
Рейтинг: 0 / 0
27.08.2019, 13:52
    #39854183
Arioch
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Направление сортировки
Кстати, ещё забавное в 2.5 (вероятно и 3, не пробовал) и IBE

select * from t2 order by id * :x
Data type unknown.

интересно, почему unknown, если id integer?
...
Рейтинг: 0 / 0
27.08.2019, 13:56
    #39854185
Симонов Денис
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Направление сортировки
Arioch,

ну вот опять ты несешь чушь.

1. В Firebird индексы однонаправленные. Что ты хотел показать своим order by id desc? Непонимание методов доступа? Уж лучше пожелать двунаправленных индексов. Да это не так просто сделать, но наверное возможно и пользы будет больше.

2. order by cast (:direction as integer) * id ещё одна билиберда. Ещё раз почитай статью про методы доступа и как работает навигация по индексу. Что будет если в direction передать число такое что результат вылезет за диапазон id? В индексе этих данных нет. Как оно должно по индексу бежать?
...
Рейтинг: 0 / 0
27.08.2019, 13:59
    #39854187
Симонов Денис
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Направление сортировки
Ariochинтересно, почему unknown, если id integer?

да неужели? А double не может быть?
...
Рейтинг: 0 / 0
27.08.2019, 14:08
    #39854194
Arioch
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Направление сортировки
Симонов Денис,

я знаю, и в тикете про однонаправленность написано. Показать я хотел - разное поведение, именно что индекс иногда применим, а иногда нет.

более того, я знаю, и что планы в текущей реализации строятся при prepare, когда значений параметров ещё нет, и что вариантных планов в FB нету. Именно поэтому тикет оформлен как improvement, а не bug

прочитай наконец тикет, он гораздо короче "методов доступа". Речь идёт про четкий случай, где id = +1 либо -1 либо 0

впрочем, твой случай "если в direction передать число такое что результат вылезет за диапазон" implementaiton details вполне можно свести к той же тройке вариантов

- брать signum(direction): исходно SQL - математическая абстракция, и конечного диапазона у чисел нет.

А реализации SQL должны стараться выдать математически-коррeктный результат и свободны в выборе внутренней реализации. Соотвественно, переполнение при умножении тут не имеет значения, потому что результат клиенту не отдается, он только внутренне используется для сортировки.

результат сортировок order by +0.0001 * id и order by +1 * id и order by +1000 * if совпадает, поскольку зависит только от знака

и оптимизатор, поэтому, сохраняя математически корректный результат сортировки, имеет право эти выражения менять одно на другое

и да, для любителей "заставить сортировать после натурала, несмотря на существующий индекс" останется order by id+0
...
Рейтинг: 0 / 0
27.08.2019, 14:11
    #39854195
Arioch
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Направление сортировки
Симонов ДенисAriochинтересно, почему unknown, если id integer?

да неужели? А double не может быть?

а он в обоих случаях может, и в случае явного CAST тоже, почему бы нет?

впрочем, это уже будет третья ветка разговора, ну её к лешему
...
Рейтинг: 0 / 0
27.08.2019, 14:14
    #39854199
Arioch
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Направление сортировки
Ariochслучай, где id = +1 либо -1 либо 0

не id, а SQL-параметр конечно
...
Рейтинг: 0 / 0
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / Направление сортировки / 25 сообщений из 27, страница 1 из 2
Целевая тема:
Создать новую тему:
Автор:
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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