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


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

Всех с пятницей!
...
Рейтинг: 0 / 0
Направление сортировки
    #39853262
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
На клиенте это будет удобнее.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Направление сортировки
    #39853264
Фотография Exteris
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Да на клиенте легко. Подумал, мож есть какая фича(костыль), о которых не знаю.
...
Рейтинг: 0 / 0
Направление сортировки
    #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
Направление сортировки
    #39853288
Фотография Exteris
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
О, вот и костыль, спасибо.))
...
Рейтинг: 0 / 0
Направление сортировки
    #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
Направление сортировки
    #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
Направление сортировки
    #39853391
Arioch
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Exteris,

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

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

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

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

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

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

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

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

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

p.s. ё-моё, ну вы серьезно хотите ASC/DESC через параметр? ядреный стыд...
...
Рейтинг: 0 / 0
Направление сортировки
    #39853979
Фотография Exteris
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ivan_PisarevskyExterisО, вот и костыль, спасибо.))Там обрыв. Не, оно вестимо сработает
У меня тип поля - дата. Так что вариант Влада подошел.
А вообще да, проще на клиенте. Но пока нет возможности его обновить.
...
Рейтинг: 0 / 0
Направление сортировки
    #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
Направление сортировки
    #39854176
Фотография kdv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ariochполноценную поддержку сортировки по подходящему индексу запросов типа select .... order by ? * (field1+field2), и как частный случай select .... order by ? * field1

* - это что?
что такое order by ? (field1+field2) ?
что значит "полноценная поддержка сортировки"? order by не использует "подходящие индексы"? Что тогда такое "подходящие индексы"?
...
Рейтинг: 0 / 0
Направление сортировки
    #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
Направление сортировки
    #39854183
Arioch
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Кстати, ещё забавное в 2.5 (вероятно и 3, не пробовал) и IBE

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

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

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

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

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

да неужели? А double не может быть?
...
Рейтинг: 0 / 0
Направление сортировки
    #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
Направление сортировки
    #39854195
Arioch
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Симонов ДенисAriochинтересно, почему unknown, если id integer?

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

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

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

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


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