![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
ограничение кол-ва записей [D6, IB6.x]
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]
В чем проблема, что заставляет ограничивать ?
(Решений несколько, всё зависит от необходимости...)