Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / (SELECT SQL) Следующие n записей. / 12 сообщений из 12, страница 1 из 1
28.03.2005, 07:58
    #32983149
Ilhom_uz
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
(SELECT SQL) Следующие n записей.
Может кто знает как организовать запрос на следующие n записей от m-ой.
Это типа
Select top n ... order by (изменчивая),
но не top, а в идеале select sub n,m ... order by (изменчивая).
Да не смейтесь!!!
Лучше давайте обсудим!!! На многих форумах это есть, но проблема когда нужны записи 35 страницы (к примеру), на каждой странице по 20 записей от сортировки (по-фамильно или по дате или ...)
...
Рейтинг: 0 / 0
28.03.2005, 08:46
    #32983176
Диченка
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
(SELECT SQL) Следующие n записей.
Ilhom_uzМожет кто знает как организовать запрос на следующие n записей от m-ой.
Это типа
Select top n ... order by (изменчивая),
но не top, а в идеале select sub n,m ... order by (изменчивая).
Да не смейтесь!!!
Лучше давайте обсудим!!! На многих форумах это есть, но проблема когда нужны записи 35 страницы (к примеру), на каждой странице по 20 записей от сортировки (по-фамильно или по дате или ...)

А в чем проблема ?
Select ... From ... Where Between(RECNO(),N,M)
...
Рейтинг: 0 / 0
28.03.2005, 09:15
    #32983194
Ilhom_uz
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
(SELECT SQL) Следующие n записей.
Диченко Ilhom_uzМожет кто знает как организовать запрос на следующие n записей от m-ой.
Это типа
Select top n ... order by (изменчивая),
но не top, а в идеале select sub n,m ... order by (изменчивая).
Да не смейтесь!!!
Лучше давайте обсудим!!! На многих форумах это есть, но проблема когда нужны записи 35 страницы (к примеру), на каждой странице по 20 записей от сортировки (по-фамильно или по дате или ...)

А в чем проблема ?
Select ... From ... Where Between(RECNO(),N,M)
Не внимательно читаешь...order by (по изменчивой сортирвке).
И ктому же recno() в select... ЭТо может фатально кончится..
Мне нужна сама технология. Хочу использовать в ХП на сервере..
----------
Где вообще модератор!!!(В рабочее время) %-))
На sql.ru уже это работает...
...
Рейтинг: 0 / 0
28.03.2005, 09:25
    #32983204
Диченка
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
(SELECT SQL) Следующие n записей.
Ilhom_uz Диченко Ilhom_uzМожет кто знает как организовать запрос на следующие n записей от m-ой.
Это типа
Select top n ... order by (изменчивая),
но не top, а в идеале select sub n,m ... order by (изменчивая).
Да не смейтесь!!!
Лучше давайте обсудим!!! На многих форумах это есть, но проблема когда нужны записи 35 страницы (к примеру), на каждой странице по 20 записей от сортировки (по-фамильно или по дате или ...)

А в чем проблема ?
Select ... From ... Where Between(RECNO(),N,M)
Не внимательно читаешь...order by (по изменчивой сортирвке).
И ктому же recno() в select... ЭТо может фатально кончится..
Мне нужна сама технология. Хочу использовать в ХП на сервере..
----------
Где вообще модератор!!!(В рабочее время) %-))
На sql.ru уже это работает...

Непонятно, где ты хочешь использовать такой селект, в фоксе или на sql сервере ? Если второе, то эти вопросы тысячекратно уже обсуждались на mssql форуме. По-моему, селект с n пл m записей даже занесен в faq. Что же касается переменной сортировки, то она спокойно делается с помощью case.
...
Рейтинг: 0 / 0
28.03.2005, 09:38
    #32983220
Ilhom_uz
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
(SELECT SQL) Следующие n записей.
В чем разница между
select top n * from .... order by fio
и
select * from .... where recn()<=n order by fio
и
select top n * from .... order by date1
и
select * from .... where recn()<=n order by date1
если в фоксе...
И еще-что возвращает recn() в каждом случае?
А за "ссылочки" спасибо...
...
Рейтинг: 0 / 0
28.03.2005, 12:41
    #32983616
Sergey Ch
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
(SELECT SQL) Следующие n записей.
Как ни странно, но у меня так и не получилось решить поставленную задачу в одном SELECT SQL... Я всегда использовал временную таблицу, куда отбирал записи, считал их, затем получал курсор с PK ID number, который затем использовал как образец для отбора записей из основной таблицы по этим PK ID используя предикт IN ...

Путь простой, но немного медленный для больших таблиц... Данную технику я использую как в ХП для SQL Server так и для ХП в VFP...

Good luck!
...
Рейтинг: 0 / 0
28.03.2005, 12:47
    #32983633
Sergey Ch
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
(SELECT SQL) Следующие n записей.
Ilhom_uz Где вообще модератор!!!(В рабочее время) %-))
На sql.ru уже это работает...
Модераторы на SQL.RU - люди на общественных началах (многие из них должны еще работать, у меня, например, сейчас очень сложный проект с весьма разнообразным набором технологий: ASP.NET Web Service + MS SQL Server 2000 + VFP 9.0), так что мне немного непонятна Ваша фраза
...
Рейтинг: 0 / 0
28.03.2005, 12:50
    #32983643
Ilhom_uz
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
(SELECT SQL) Следующие n записей.
Спасибо SergeyCh!
Никто не знает как работает изнутри select top n ... order by ...
По-моему изнутри перебирается всё, потом выводится top n.
Если это не так, поправьте (опровергните)
...
Рейтинг: 0 / 0
28.03.2005, 12:56
    #32983658
Sergey Ch
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
(SELECT SQL) Следующие n записей.
Ilhom_uzСпасибо SergeyCh!
Никто не знает как работает изнутри select top n ... order by ...
По-моему изнутри перебирается всё, потом выводится top n.
Если это не так, поправьте (опровергните)
Нет, не совсем так - берутся первые записи. Достигнув указанного количества - выборка прекращается...

Если есть сортировка или Joint condidtions - то тут скорее всего идет отбор с использованием индексов (если есть) (причем выборка идет во временную таблицу/курсор) и опять-же остановка после набранного необходимого количества... Примерно так, как я описал Вам выше...

Но иногда выбираются и все...
...
Рейтинг: 0 / 0
28.03.2005, 13:03
    #32983683
Ilhom_uz
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
(SELECT SQL) Следующие n записей.
Я так и думал, что с начала по индексам во временную...
Спасибо!!!
...
Рейтинг: 0 / 0
28.03.2005, 13:05
    #32983689
Sergey Ch
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
(SELECT SQL) Следующие n записей.
Вот классический пример от SQL Server, почитайте, может быть поможет:

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
CREATE PROCEDURE [dbo].[sp_Forums_GetRepliesByPage]
@TopicID	int,
@PageNumber	int,
@PageSize	int
AS

-- create a temporary table with the columns we are interested in
CREATE TABLE #TempReplies
(
	ID 		int IDENTITY PRIMARY KEY,
	ReplyID		int,
	Message	text COLLATE Cyrillic_General_CI_AS,
	AddedDate	datetime,
	MemberID	int,
	MemberName	varchar( 15 ) COLLATE Cyrillic_General_CI_AS,
	Email		varchar( 50 ) COLLATE Cyrillic_General_CI_AS,
	ShowEmail	bit,
	Signature	varchar( 300 ) COLLATE Cyrillic_General_CI_AS,
	AvatarUrl	varchar( 100 ) COLLATE Cyrillic_General_CI_AS,
	Homepage	varchar( 100 ) COLLATE Cyrillic_General_CI_AS
)

-- fill the temp table with all the replies for the 
-- specified topic retrieved from the v_Forums_Replies view
INSERT INTO #TempReplies
(
	ReplyID,
	Message,
	AddedDate,
	MemberID,
	MemberName,
	Email,
	ShowEmail,
	Signature,
	AvatarUrl,
	Homepage
)
SELECT 
	ReplyID,
	Message,
	AddedDate,
	MemberID,
	MemberName,
	Email,
	ShowEmail,
	Signature,
	AvatarUrl,
	Homepage
FROM 
  v_Forums_Replies WHERE TopicID = @TopicID ORDER BY AddedDate Asc

-- declare two variables to calculate the range of records to extract for the specified page
DECLARE @FromID int
DECLARE @ToID int
-- calculate the first and last ID of the range of replies we need
SET @FromID = ((@PageNumber -  1 ) * @PageSize) +  1 
SET @ToID = @PageNumber * @PageSize

-- select the page of records
SELECT ReplyID, Message, AddedDate, MemberID, MemberName, Email, ShowEmail, Signature, AvatarUrl, Homepage 
	FROM #TempReplies WHERE ID >= @FromID AND ID <= @ToID

GO
...
Рейтинг: 0 / 0
28.03.2005, 13:09
    #32983695
Ilhom_uz
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
(SELECT SQL) Следующие n записей.
Главное техника, Ваш приведенный код конечно лишний(не бывает ничего лишнего). Но все равно спасибо.

Отличия профи от других:
С профи диалог длится гораздо меньше, чем с другими. :-))
...
Рейтинг: 0 / 0
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / (SELECT SQL) Следующие n записей. / 12 сообщений из 12, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]