Модераторы: Akella
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Инструкция IN 
:(
    Опции темы
Akella
  Дата 5.1.2006, 11:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Творец
****


Профиль
Группа: Модератор
Сообщений: 18485
Регистрация: 14.5.2003
Где: Корусант

Репутация: 20
Всего: 329



В коде SQL нужно писать
Код

SELECT * FROM table WHERE field IN ('11', '24','699')


а если в скобках поставить 1000 параметров...smile
а можно ли передать как-нить передать масив, может есть другие способы выборки данных подобным образом?
PM MAIL   Вверх
xgm
Дата 5.1.2006, 13:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 32
Регистрация: 10.8.2005

Репутация: 1
Всего: 1



Можно например так: SELECT * FROM table WHERE field IN select ...

...Но лучше не нужно...
PM MAIL   Вверх
Akella
Дата 5.1.2006, 14:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Творец
****


Профиль
Группа: Модератор
Сообщений: 18485
Регистрация: 14.5.2003
Где: Корусант

Репутация: 20
Всего: 329



не, мне так не пойдет
принцип такой, на форие есть TCheckListBox, я выбираю нужные пункты и по этим пунктам формируется IN ('Пункт1', 'Пункт3', и т.д.)
Добавлено @ 14:20
хотя, если эти пункти запихнуть в таблицу, то может и лучше будет использовать IN Select
PM MAIL   Вверх
Alex
Дата 5.1.2006, 14:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 4147
Регистрация: 25.3.2002
Где: Москва

Репутация: 7
Всего: 162



Кол-во констант в наборе имеет ограничение максимум 1500 значений - возможно меньше, если значение велики по размеру, и размер строки запроса превышает его лимит в 64 Кб. (Firebird руководство разработчика баз данных, автор Хелен Борри)


--------------------
Написать можно все - главное четко представлять, что ты хочешь получить в конце. 
PM Skype   Вверх
xgm
Дата 5.1.2006, 14:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 32
Регистрация: 10.8.2005

Репутация: 1
Всего: 1



Быстрее будет работать конструкция типа:
SELECT * FROM table WHERE EXIST (select ...)


Синтаксикс примерно такой:
exists (select id from table2 where table2.id = table1.id)

PM MAIL   Вверх
Akella
Дата 5.1.2006, 14:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Творец
****


Профиль
Группа: Модератор
Сообщений: 18485
Регистрация: 14.5.2003
Где: Корусант

Репутация: 20
Всего: 329



Цитата(Alex @ 5.1.2006, 14:22 Найти цитируемый пост)

Кол-во констант в наборе имеет ограничение максимум 1500 значений

недопонял
а если у меня несколько инструкций IN, например

Код

where
field1 in ('dfgdfgds','sdfgfdgfdg', и т.д.)
and
field2 in ('11','12', и т.д.)

вот в этом случает всё равно нельзя превышать 1500 или для каждой инструкции IN не должно превышать 1500?
PM MAIL   Вверх
Alex
Дата 5.1.2006, 14:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 4147
Регистрация: 25.3.2002
Где: Москва

Репутация: 7
Всего: 162



каждая.

Еще ссылка по теме http://forum.ibase.ru/phpBB2/viewtopic.php?t=1670


--------------------
Написать можно все - главное четко представлять, что ты хочешь получить в конце. 
PM Skype   Вверх
Akella
Дата 5.1.2006, 15:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Творец
****


Профиль
Группа: Модератор
Сообщений: 18485
Регистрация: 14.5.2003
Где: Корусант

Репутация: 20
Всего: 329



меня терзают смутные сомнения по поводу

Цитата(xgm @ 5.1.2006, 14:39 Найти цитируемый пост)

Быстрее будет работать конструкция типа:
SELECT * FROM table WHERE EXIST (select ...)


Синтаксикс примерно такой:
exists (select id from table2 where table2.id = table1.id)


так нужно в базе создавать лишних 5-7 таблиц, писАть в таблицы при выборе пользователем того или иного чекбокса в списке

больше мороки, мне кажется
PM MAIL   Вверх
TheCetus
Дата 15.3.2006, 17:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 134
Регистрация: 9.3.2006

Репутация: нет
Всего: 2



в чем проблема?
не знаешь как передать заранее неизвестное число параметров в процедуру или как по ним сформировать динамический SQL запрос?

если первое то можно параметры передать через строку и с помощью UDF функции ее распарсить на элементы, которые затем использовать получится что то типа
Код

declare i integer
declare j integer
declare id integer;
begin
  i = 0;
  j = udf_itemcount(:param);
  while (i < j) do
  begin
    id = udf_getitem(:param, :i); 
    select name from table1 where id = :id
    ...    
  end
end


если второе, то тебе уже все рассказали smile

PM MAIL   Вверх
Linco
Дата 23.3.2006, 16:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 8
Регистрация: 14.2.2006

Репутация: нет
Всего: нет



Я не думаю что у тебя в программе будет 1000 checkbox, если их больше 10 это уже не совсем правильная проектировка интерфейса.
А вообще с таблицами in обычно заменяют на join , но надо смотреть конкретный пример.
PM MAIL   Вверх
AZDesign
Дата 31.3.2006, 09:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 11
Регистрация: 24.6.2005

Репутация: нет
Всего: нет



Вообще для CheckBox лучше использовать битовые операции
У меня сейчас в проекте 4 CheckBoxList по 30 CheckBox-ов, каждый превращается в один Integer
А в БД положил три функции f_BitTest, f_BitSet, f_BitClear
И выборка осуществляется в 100 раз быстрее чем перечисление их в массиве

PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Interbase"
Alex

Обязательно указание:

1. Версию InterBase (Firebird, Yaffil)

2. Способа доступа (ADO, BDE, IBX и т.д.)

  • КАК ПРАВИЛЬНО ОФОРМИТЬ КОД - ЗДЕСЬ
  • КАК ПРАВИЛЬНО УКАЗАТЬ ТЕКСТ ОШИБКИ - ЗДЕСЬ
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • FAQ раздела лежит здесь!

Если Вам понравилась атмосфера форума, заходите к нам чаще! С Уважением, Akella.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Firebird, Interbase | Следующая тема »


 




[ Время генерации скрипта: 0.0805 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.