Страница 3 из 4
Добавлено: 21 фев 2005, 11:09
Seaman
Ну какой-то порядок же должен быть, по нему и ориентироваться ... Когда я делал свою аппликацию и мне надо было разбить всю БД постанично, замордовался в этом самом выборе ... Вот в Oracl- е все хорошо и тепло, там rowid есть, а у меня Access ... Потом нашел где-то в литературе, что Access и, по-моему но не буду утверждать - не помню, SQL Server поддерживают только SELECT TOP, т.е. выбор определенного количества первых записей, а там уже их надо крутить взад-вперед...
Добавлено: 21 фев 2005, 11:09
Yury
vg писал(а):Речь идёт, как ни странно, имменно о физическом порядке
похоже второе, правда смысла в этом не вижу
Добавлено: 21 фев 2005, 11:12
Seaman
Yury писал(а):vg писал(а):Речь идёт, как ни странно, имменно о физическом порядке
похоже второе, правда смысла в этом не вижу
Смысл, как и у меня, в постраничной разбивке большого числа записей. Выбрать с 1-го по 10-й, с 11-го по 20-й и т.д.
Добавлено: 21 фев 2005, 11:22
Yury
Seaman писал(а):Yury писал(а):vg писал(а):Речь идёт, как ни странно, имменно о физическом порядке
похоже второе, правда смысла в этом не вижу
Смысл, как и у меня, в постраничной разбивке большого числа записей. Выбрать с 1-го по 10-й, с 11-го по 20-й и т.д.
в таком-то случае и это работает:
Yuri Diamant писал(а):SELECT * FROM tbl
WHERE (SELECT COUNT(*) FROM tbl t WHERE t.[id]<=tbl.[id])
BETWEEN 5 AND 10 ORDER by id
но к физическому порядку это отношения не имеет
Добавлено: 21 фев 2005, 11:34
Seaman
Yury писал(а):Seaman писал(а):Yury писал(а):vg писал(а):Речь идёт, как ни странно, имменно о физическом порядке
похоже второе, правда смысла в этом не вижу
Смысл, как и у меня, в постраничной разбивке большого числа записей. Выбрать с 1-го по 10-й, с 11-го по 20-й и т.д.
в таком-то случае и это работает:
Yuri Diamant писал(а):SELECT * FROM tbl
WHERE (SELECT COUNT(*) FROM tbl t WHERE t.[id]<=tbl.[id])
BETWEEN 5 AND 10 ORDER by id
но к физическому порядку это отношения не имеет
Дык в том-то и вопрос, что нужен физический порядок, а номер id рояли не играет, как у них там в начале 1,2,5,10,11,20. Запись № 5 имеет величену id = 11, запись № 6 имеет величину id = 20, а больше записей нет, т.е. физическим порядком 5- 10 мы получаем только две строчки. (читай страница вторая, что должна содержать записи с 5-й по 10-ю имеет только две записи с id = 11 и с id = 20) Вот и все кино, единственно, как Вы правильно заметили, а что если id стоят в беспорядке, хотя и здесь порядок можно организовать: сначала значки, потом цифирки, потом уж буковки) Все равно SELECT TOP ... ORDER BY сработает (есть у меня и такой живой пример кода)
Добавлено: 21 фев 2005, 11:35
папа Карло
вы не путайте две вещи... физический ордер не имеет смысла. если надо иметь постраничную выборку набора записей по определенному критерию то это совсем другая песня. для постраницчного просмотра данных существует мильен способов.
1. через временную таблицу
2. через хеш таблицу, когда сортировка производится по фиксированному числу полей....
3. навороченным запросом (имхо самый убогий способ).
я абсолютно не вижу нафига надо выдать 5 записей с 5ой по 10ую в том порядке как они в базе хранятся.
тут было предложение с двойной сортировкой вперед и наоборот по ИД. но если это скл сервер и кластерный ключ не является именно тот ИД и только он, то тоот запрос не будет работать.

Re: Простой вопрос по SQL
Добавлено: 21 фев 2005, 11:44
Seaman
Еще раз читаем ВНИМАТЕЛЬНО вопрос:
vg писал(а):...
Id - 1,2,5,10,11,20. ... как получить набор записей, включающий записи с 5 по 10.
Т.е. чтобы в наборе мы получили:
id = 11, TxtName = "kjsdfskjf"
id = 20, TxtName = "reworumcnc"
...
Добавлено: 21 фев 2005, 11:49
Yury
Seaman писал(а):Yury писал(а):Seaman писал(а):Yury писал(а):vg писал(а):Речь идёт, как ни странно, имменно о физическом порядке
похоже второе, правда смысла в этом не вижу
Смысл, как и у меня, в постраничной разбивке большого числа записей. Выбрать с 1-го по 10-й, с 11-го по 20-й и т.д.
в таком-то случае и это работает:
Yuri Diamant писал(а):SELECT * FROM tbl
WHERE (SELECT COUNT(*) FROM tbl t WHERE t.[id]<=tbl.[id])
BETWEEN 5 AND 10 ORDER by id
но к физическому порядку это отношения не имеет
Дык в том-то и вопрос, что нужен физический порядок, а номер id рояли не играет, как у них там в начале 1,2,5,10,11,20. Запись № 5 имеет величену id = 11, запись № 6 имеет величину id = 20, а больше записей нет, т.е. физическим порядком 5- 10 мы получаем только две строчки. (читай страница вторая, что должна содержать записи с 5-й по 10-ю имеет только две записи с id = 11 и с id = 20) Вот и все кино, единственно, как Вы правильно заметили, а что если id стоят в беспорядке, хотя и здесь порядок можно организовать: сначала значки, потом цифирки, потом уж буковки) Все равно SELECT TOP ... ORDER BY сработает (есть у меня и такой живой пример кода)
seaman, ты говоришь не о физическом порядке, а о порядке записей в сортированной выборке, кстати обрати внимание, что в вышеприведенном запросе BEETWEN относится отнюдь не к id
btw, твой запрос возвращает записи с 2 по 6

Добавлено: 21 фев 2005, 11:51
Yury
папа Карло писал(а):вы не путайте две вещи... физический ордер не имеет смысла
согласен
папа Карло писал(а):для постраницчного просмотра данных существует мильен способов.
1. через временную таблицу
2. через хеш таблицу, когда сортировка производится по фиксированному числу полей....
а в эти таблицы они не запросом попадают?
Re: Простой вопрос по SQL
Добавлено: 21 фев 2005, 11:53
Yury
Seaman писал(а):Еще раз читаем ВНИМАТЕЛЬНО вопрос:
vg писал(а):...
Id - 1,2,5,10,11,20. ... как получить набор записей, включающий записи с 5 по 10.
Т.е. чтобы в наборе мы получили:
id = 11, TxtName = "kjsdfskjf"
id = 20, TxtName = "reworumcnc"
...
а если это учесть:
...Т.е. не обязательно последовательность. Про уникальность тоже не знаю...
Добавлено: 21 фев 2005, 12:04
Seaman
Это ужо придирание к словам!

Мы ваших университетов не кончали и таковым терминам не обучены (а то приглашу на клотик чай с кницами пить после тяжелого рабочего дня, да индигет почитать, слабо?

) Извиняюсь если не так чего обозвал там физический порядок - не физический беспорядок. Я считаю, что главное - суть. Суть вопроса
vg ясна и решается предложенным образом (проверено на практике) в случае Oracl-а это
rowid, а в случае Access-а SELECT TOP ... ORDER BY (
R.T.F.M.), что-то еще другое есть у MySQL - не помню, но тоже отличается (кажется кто-то этот пример уже приводил). Другие БД не знаю, скажу честно.

Добавлено: 21 фев 2005, 12:06
папа Карло
Yury писал(а):папа Карло писал(а):для постраницчного просмотра данных существует мильен способов.
1. через временную таблицу
2. через хеш таблицу, когда сортировка производится по фиксированному числу полей....
а в эти таблицы они не запросом попадают?
в первую запросом, во вторую просто дописывание происходит при вставке новых записей....
Добавлено: 21 фев 2005, 12:10
Seaman
Yury писал(а):
btw, твой запрос возвращает записи с 2 по 6

Вообще-то с 6-й по 10-ю включительно

Добавлено: 21 фев 2005, 12:19
папа Карло
перечитал вопрос.... "Предпологается МССКЛ Сервер".... приведена таблица без никаких индексов. требуется выдать с 5ой по 10ую записей в физическом ордере (ибо хочет 11 и 20).... задача не имеет решения.
Добавлено: 21 фев 2005, 12:22
Yury
Seaman писал(а):Yury писал(а):
btw, твой запрос возвращает записи с 2 по 6

Вообще-то с 6-й по 10-ю включительно

table:
id txtName
1 erge
2 er
5 rtyeryt
10 re
11 afvsa
20 asdhnf
your query:
id txtName
2 er
5 rtyeryt
10 re
11 afvsa
20 asdhnf