Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

ограничение кол-ва записей [D6, IB6.x]


Страницы:   1 2

Viktor ©   (2004-04-18 14:18:00) 

подскажите пожалуйста, как с помошью SQL запроса ограничить количество записей в выборке.


Женя   (2004-04-19 12:23:00) [1]

Удалено модератором
Примечание: Задай свой вопрос в отдельной ветке


Nikolay M.   (2004-04-19 11:08:00) [2]


> результатом будет аварийное снятие процесса со всеми вытекающими
> последствиями.

Обычное дело, не первый раз замужем :)


Anatoly Podgoretsky   (2004-04-19 11:01:00) [3]

Nikolay M. ©   (19.04.04 10:46) [24]
Хорошо если минут, а не часов, результатом будет аварийное снятие процесса со всеми вытекающими последствиями.


Viktor   (2004-04-19 10:49:00) [4]

>Nikolay M. ©  (19.04.04 10:46) [24]

уже дошел. :-)
всем спасибо.


Nikolay M.   (2004-04-19 10:46:00) [5]


> если выборка идет по имени и указано мало буквЮ менее трех
> тогда запрашивать пользователя.

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


Anatoly Podgoretsky   (2004-04-19 10:42:00) [6]

Nikolay M. ©   (19.04.04 10:19) [19]
Этот Count потребует столько же времени, сколько и выполнение запроса и без него, в итоге удвоение времени выполнения запроса. Речь конечно не о простых линейных запросах.
Надо бороться ограничениями на уровне пользователя, пусть он сам принимает решение, ждать ему или нет, ответив на это в диалоге, а определить необходимость этого несложно, если выборка идет по имени и указано мало буквЮ менее трех тогда запрашивать пользователя. Для простых запросов допустимо и Count сделать для предварительной оценки, конечно если запрос осуществляется доли секунды, иначе пользователь не поблагодарит за такую медвежью услугу. Решать в каждом конкретном случае индивидульно, но решение с подверждением пользователем очень эффективно, через некоторое время он начинает сам делать очень эффективные запросы.

Это могут подтвердить ведущие собаководы.


Reindeer Moss Eater   (2004-04-19 10:37:00) [7]

не позволять - это хорошо. только в моем случае наверное проще сделать ограничение. :-(

Ну сделаешь ты ограничение. Что дальше?
Юзер ввел запрос LIKE 'K%'
Запросу удовлетворяет 100 записей, а ты покажешь 10.
На основании этой выборки юзер сделает направильный вывод.
А именно твоя программа и предназначена помогать делать правильный вывод.
Нужна будет юзеру такая программа как у тебя?
Нафик не нужна


Viktor   (2004-04-19 10:25:00) [8]

>Johnmen ©  (19.04.04 10:18) [17]

вы имели в виду - неполны потому что "включено" ограничение?
да, но это будет решать сам пользователь.

в некотором смысле такой вариант и есть то о чем говорил Anatoly Podgoretsky ©  (19.04.04 10:16) [16]


Viktor   (2004-04-19 10:23:00) [9]

>Anatoly Podgoretsky ©  (19.04.04 10:16) [16]

не позволять - это хорошо. только в моем случае наверное проще сделать ограничение. :-(
Fetch? К сожалению не знаком с этим понятием.

>Johnmen ©  (19.04.04 10:18) [17]
почему? запрос вернет всех покупателей у которых имя организации начинается на "К".


Nikolay M.   (2004-04-19 10:19:00) [10]


> теперь представим что пользователь в качестве условия отбора
> ввел символ "К" (название организации) вот в этих случаях
> желательно иметь возможность ограничивать количество записей
> в выборке

В этом случае желательно сделать предварительно SELECT count(1)... и, если записей больше 500-1000, вежливо послать пользователя "Задайте более строгое условие для поиска".


Sergey13   (2004-04-19 10:18:00) [11]

2Viktor   (19.04.04 10:11) [15]
>пользователь в качестве условия отбора ввел символ "К"
Ну и пошли его на букву "Х", в смысле "не хватает информации для поиска".

>вот в этих случаях желательно иметь возможность ограничивать количество записей в выборке.
Это чем же это желательно? Запрос вернул 10000 записей, а юзер видит 5. Что он делает? Правильно - вводит нового. Хотя нужный был шестым. 8-)


Johnmen   (2004-04-19 10:18:00) [12]

>Viktor   (19.04.04 10:11) [15]

Но тогда полученные данные будут недостоверны, то есть неполны.
А вообще по умолчанию записей на клиента предается столько, сколько потребно приложению. Если, конечно, явно не предпринимаются действия по получению всех...


Anatoly Podgoretsky   (2004-04-19 10:16:00) [13]

Не позволять делать такие запросы, пусть вводит не менее 3 символов. Не хочет, тогда пусть ждет, можешь об этом его предупредить в диалоге. К тому же ограничение TOP все равно будет выполнять весь запрос, оно влияет только на количество данных возвращаемых клиенту, а для этого существует такое понятие как Fetch


Viktor   (2004-04-19 10:11:00) [14]

>Johnmen ©  (19.04.04 09:58) [14]

но все же это бывает.
допустим есть база покупателей у крупного оптовика. запрос на поиск конкретного покупателя формируется в зависимости от того в какие контролы пользователь ввел значения. т.е. если пользователь ввел название организации и инн то в предложение where попадут условия именно по этим полям. чем больше данных дает пользователь тем меньше записей вернет сервер. теперь представим что пользователь в качестве условия отбора ввел символ "К" (название организации) вот в этих случаях желательно иметь возможность ограничивать количество записей в выборке.


Johnmen   (2004-04-19 09:58:00) [15]

>Viktor   (19.04.04 09:56) [13]
>запрос может возвращать очень большое количество данных (>100000 записей)

А вот этого не должно быть. см.Sergey13 ©   (19.04.04 09:16) [11]


Viktor   (2004-04-19 09:56:00) [16]

>Johnmen ©  (19.04.04 09:12) [9]

запрос может возвращать очень большое количество данных (>100000 записей)

>Nikolay M. ©  (19.04.04 09:10) [8]

спасибо, сейчас попробую.


Anatoly Podgoretsky   (2004-04-19 09:18:00) [17]

Reals ©   (19.04.04 09:15) [10]
Может тогда не стоит советовать?
В ИБ6 не такой возможности ограничить количество записей кроме реляционных, или переходить на другую базу, хоть тот же ИБ но выше номером.


Sergey13   (2004-04-19 09:16:00) [18]

2Viktor   (19.04.04 09:03) [7]
>как же быть если юзаешь IB6?

Работать над фразой where независимо от сервера БД.


Reals   (2004-04-19 09:15:00) [19]

Можно еще попробовать SELECT TOP 10 * FROM Table1
В MSSQL это работает, в IB нет возможности проверить.


Johnmen   (2004-04-19 09:12:00) [20]

>Viktor   (19.04.04 09:03) [7]

В чем проблема, что заставляет ограничивать ?
(Решений несколько, всё зависит от необходимости...)


Страницы:   1 2

Наверх

Титульная страница Поиск, карта сайта Написать письмо