![]() |
|
Модераторы: Akella |
![]()
|
|
| tishaishii |
|
|||
![]() Создатель ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1262 Регистрация: 14.2.2006 Где: Москва Репутация: нет Всего: 8 |
Смысл: в программу попадает набор ключей TABLE1.ID_TABLE в определённом порядке.
Динамически составляю запрос типа:
и выполяю его с полученным и определённым способом упорядоченных ключей в качестве аргументов. Например, набор ключей ID_TABLE: 2, 10, 1, 1001, 32. Получаю набор записей с соответствующими ключами. Только порядок записей не соблюдён (по набору ключей), т.е. получаю записи вроде: 1001, 32, 2, 10, 1. Как отсортировать-то? |
|||
|
||||
| ksili |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2069 Регистрация: 3.11.2005 Где: Красноярск Репутация: нет Всего: 17 |
может добавить ORDER BY ID_TABLE в конце?
или сортировать уже когда запрос динамически составляете? -------------------- Ничто так не развивает аналитическое мышление, как отладка сложной программы без возможности пошагового выполнения (с) |
|||
|
||||
| tishaishii |
|
|||
![]() Создатель ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1262 Регистрация: 14.2.2006 Где: Москва Репутация: нет Всего: 8 |
Ты не о том. Если я передаю в IN(...) параметры в порядке (2, 10, 1, 13), то и соответствующие найденные записи должны быть упорядочены в том же порядке, т.е. я получу записи с ключами (2, 10, 1, 13) именно в том порядке, как перечислены аргументы.
Вывод: ID_TABLE1 TITLE 2 ksladfskl 10 ksladfskl 1 ksladfskl 13 ksladfskl |
|||
|
||||
| Deniz |
|
|||
|
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1251 Регистрация: 16.10.2004 Где: Новый Уренгой Репутация: 22 Всего: 44 |
Можно извратиться через доп. таблицу
id, order_field 2 - 1 10 - 2 1 - 3 13 - 4 Добавляй в эту таблицу свои значения, а потом join с нужной таблицей и order by order_field, если пользователей > 1 тогда добавить поле id_session или что-то типа того для идентификации выборки и параметров. -------------------- "Для того чтобы сделать шаг вперед, достаточно пинка сзади" (с) |
|||
|
||||
| tishaishii |
|
|||
![]() Создатель ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1262 Регистрация: 14.2.2006 Где: Москва Репутация: нет Всего: 8 |
Понял. Спасибо, вариант подходящий.
|
|||
|
||||
| Deniz |
|
|||
|
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1251 Регистрация: 16.10.2004 Где: Новый Уренгой Репутация: 22 Всего: 44 |
Причем на Order_Field можно поставить генератор, и забыть
-------------------- "Для того чтобы сделать шаг вперед, достаточно пинка сзади" (с) |
|||
|
||||
| kZ25 |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 15 Регистрация: 4.7.2006 Репутация: нет Всего: нет |
не надо усложнять себе жизнь (с доп. таблицами)
просто преобразовывайте с помощью CASE значения ID_TABLE в нужный порядок сортировки и сортируйте по нему. пример:
|
|||
|
||||
| Deniz |
|
|||
|
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1251 Регистрация: 16.10.2004 Где: Новый Уренгой Репутация: 22 Всего: 44 |
kZ25, как раз твой способ и есть усложнение жизни.
Плюсы: 1. Нет доп. таблиц. Минусы: 1. select строится динамически на клиенте - оптимизатор каждый раз его разбирает, это доп. работа. 2. использование индексов по такому order by под большим вопросом, а это доп. нагрузка. 3. если таких параметров ID_TABLE in(2, 10, 1, 13, ...) будет много, то select превратится в достаточно длинную строку, что доп. нагрузит оптимизатор. А теперь сравним с доп. таблицами:
Плюсы: 1. select уже подготовленный и есть план запроса. 2. связь с Order_Table(небольшое кол-во записей) по индексному полю (ID), т.е. использование индексов и в Table1 и в Order_Table 3. Кол-во параметров не ограничено, т.е. их может быть и тысячи. Минусы: 1. Доп. время на добавление в таблицу Order_Table(удаление можно запускать периодически каждый час/день/ и т.д.). PS: каждый для себя сам решит что для него лучше. -------------------- "Для того чтобы сделать шаг вперед, достаточно пинка сзади" (с) |
|||
|
||||
![]()
|
| Правила форума "Interbase" | |
|
|
Обязательно указание: 1. Версию InterBase (Firebird, Yaffil) 2. Способа доступа (ADO, BDE, IBX и т.д.)
Если Вам понравилась атмосфера форума, заходите к нам чаще! С Уважением, Akella. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | Firebird, Interbase | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |