Этот баннер — требование Роскомнадзора для исполнения 152 ФЗ.
«На сайте осуществляется обработка файлов cookie, необходимых для работы сайта, а также для анализа использования сайта и улучшения предоставляемых сервисов с использованием метрической программы Яндекс.Метрика. Продолжая использовать сайт, вы даёте согласие с использованием данных технологий».
Политика конфиденциальности
|
|
|
Отбор записей начиная с определенного номера, и заканчивая другим
|
|||
|---|---|---|---|
|
#18+
Задача такая: Пусть есть таблица, состоящая из 2-х полей. 1-е - строка, второе - datetime. Задача написать процедуру, которая бы отбирала записи начиная с номера i и заканчмвая номером k (i и k - параметры хр-й процедуры). Я смог сделать это только с помощью временной таблицы, но есть подозрение, что в SQL-server'е могут быть какие-нибудь функции, которые помогают сделать это. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.08.2001, 08:43 |
|
||
|
Отбор записей начиная с определенного номера, и заканчивая другим
|
|||
|---|---|---|---|
|
#18+
А чем between плох? select * from YourTable where field between i and k Все равно записи по какому-то критерию выбираются, ну хотя бы по строке. select top k * from YourTable where [Строковое поле] > или < строки или Вам просто в некотором диапазоне нужно? Но зачем? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.08.2001, 08:46 |
|
||
|
Отбор записей начиная с определенного номера, и заканчивая другим
|
|||
|---|---|---|---|
|
#18+
Может я чего-то не понимаю, но что вы предлагаете поставить вместо слова field ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.08.2001, 08:52 |
|
||
|
Отбор записей начиная с определенного номера, и заканчивая другим
|
|||
|---|---|---|---|
|
#18+
И еще, select top @k не работает, там можно только число поставить. Зачем - другой вопрос. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.08.2001, 08:55 |
|
||
|
Отбор записей начиная с определенного номера, и заканчивая другим
|
|||
|---|---|---|---|
|
#18+
Да кое чего Вы не поняли. Ну это не беда. Вместо field можно имя Вашего поля вставить, если у Вас в этой таблице кроме тех двух полей что Вы указали, ID есть. Насчет того что select top @k не работает это я знаю, но ведь можно exec('select top ' + cast(@k, varchar(10)) + '...'). Я Вам конечно не полностью решение выдал, т.к. Вы вроде на самый главный вопрос не ответили. По критерию записи выбираем или в произвольном диапазоне? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.08.2001, 09:05 |
|
||
|
Отбор записей начиная с определенного номера, и заканчивая другим
|
|||
|---|---|---|---|
|
#18+
1. >select top @k не работает, там можно только число поставить SET @@ROWCOUNT @k SELECT .... FROM ... 2. >записи начиная с номера i и заканчмвая номером k А что вы самим поразумеваете по словами "номер записи", если у вас нет для этого поля ? Физическое расположение записи в таблице ? Расположение этой же записи в результате выполнения простого SELECT-a ? Расположение этой же записи в результате выполнения SELECT-a с опцией ORDER BY? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.08.2001, 09:05 |
|
||
|
Отбор записей начиная с определенного номера, и заканчивая другим
|
|||
|---|---|---|---|
|
#18+
Мне это нужно было для поиска по форуму, и id записи тут был бы ни к чему. В результате получается нечто вроде этого: declare @i int declare @k int set @i=100 set @k=200 declare @ss varchar(10),@ss1 varchar(10) set @ss = cast((@k - @i) as varchar(10)) set @ss1 = cast(@k as varchar(10)) exec('select * from (select top '+@ss+' msg.* from (select top '+@ss1+' * from _msg order by date) msg order by msg.date desc) m order by m.date') ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.08.2001, 09:49 |
|
||
|
Отбор записей начиная с определенного номера, и заканчивая другим
|
|||
|---|---|---|---|
|
#18+
2 Иван 1. А зачем передавать 2 параметра? 2. не понимаю как может помочь в поиске по форуму запрос на выборку определенного количества записей? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.08.2001, 09:56 |
|
||
|
Отбор записей начиная с определенного номера, и заканчивая другим
|
|||
|---|---|---|---|
|
#18+
Возможно вам нужно организовать постраничный вывод результатов запроса на стороне клиента (например, по 100 записей на одной странице) ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.08.2001, 10:12 |
|
||
|
Отбор записей начиная с определенного номера, и заканчивая другим
|
|||
|---|---|---|---|
|
#18+
Всё верно. Нужен просто постраничный вывод (настраиваемый) результатов поиска. Хотелось написать это покорректней, но, похоже решение (выше), будет очень тормозным. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.08.2001, 12:42 |
|
||
|
Отбор записей начиная с определенного номера, и заканчивая другим
|
|||
|---|---|---|---|
|
#18+
2 Иван Посмотрите на десток тем ниже тему "Как получать запрос порционно" ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.08.2001, 12:47 |
|
||
|
Отбор записей начиная с определенного номера, и заканчивая другим
|
|||
|---|---|---|---|
|
#18+
Смешной вопрос - а что такое номер строки? Т.е. SQL2K, например, вообще не гарантирует что select всегда в одном и том же порядке записи возращать будет. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.08.2001, 13:05 |
|
||
|
Отбор записей начиная с определенного номера, и заканчивая другим
|
|||
|---|---|---|---|
|
#18+
to Alexander Chepack: В таблице 2 поля - строка и datetime. Сортировка по datetime. Genady: Ваше решение - временная таблица, мой вопрос - как сделать это без временной таблицы. Такой вопрос. Например, я пишу поисковый сервер по интернету. В результате поиска найдены миллионы записей, естественно расставленные по какому-то приоритету. Задача разбить результаты поиска по страницам. Здесь я вижу несколько решений: 1. Результаты поиска во врем таблицу, дальше понятно. 2. Забирать рекордсет целиком, и обрабатывать его АСП'ом или чем-то еще 3. Тот код, который я привел в середине. Интересно, какие решения используются в реальной жизни, и какое из этих 3-х быстрее, затрачивает меньше памяти и проч. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.08.2001, 13:16 |
|
||
|
Отбор записей начиная с определенного номера, и заканчивая другим
|
|||
|---|---|---|---|
|
#18+
>Ваше решение - временная таблица, мой вопрос - как сделать это без временной таблицы. Почему? Не всегда вариант с временной таблицей медленные, чем с подзапросом. >2. Забирать рекордсет целиком, и обрабатывать его АСП'ом или чем-то еще Рекордсет с милионом записей? Хм... Ну попробуйте. >3. Тот код, который я привел в середине. А Вы его проверяли? Что то мне кажется, что он будет возвращять всегда один и тот же рекордсет P.S. Постраничный вывод данных здесь уже много раз обсуждался, поробуйте поискать. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.08.2001, 13:31 |
|
||
|
Отбор записей начиная с определенного номера, и заканчивая другим
|
|||
|---|---|---|---|
|
#18+
to Genady: То есть вы считаете, что временная таблица всё-же оптимальный выход ? Код я проверял. Для того, чтобы он не возвращал всё время один и тот же рекордсет надо присваиватьразные значения переменным i и k Вопрос закрыт. всем спасибо. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.08.2001, 15:15 |
|
||
|
Отбор записей начиная с определенного номера, и заканчивая другим
|
|||
|---|---|---|---|
|
#18+
to Genady: То есть вы считаете, что временная таблица всё-же оптимальный выход ? Код я проверял. Для того, чтобы он не возвращал всё время один и тот же рекордсет надо присваивать разные значения переменным i и k Вопрос закрыт. всем спасибо. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.08.2001, 15:15 |
|
||
|
Отбор записей начиная с определенного номера, и заканчивая другим
|
|||
|---|---|---|---|
|
#18+
>Для того, чтобы он не возвращал всё время один и тот же рекордсет надо присваивать разные значения переменным i и k Ну рекордсет то может и разный, но не факт что постранично это проверяли? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.08.2001, 16:49 |
|
||
|
|

start [/forum/topic.php?fid=46&msg=32011939&tid=1825860]: |
0ms |
get settings: |
7ms |
get forum list: |
15ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
29ms |
get topic data: |
8ms |
get forum data: |
2ms |
get page messages: |
50ms |
get tp. blocked users: |
2ms |
| others: | 225ms |
| total: | 344ms |

| 0 / 0 |
