![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
n первых записей [D7, IB6.x]
Narayan © (2004-05-03 04:30:00)Как выбрать n первых записей в IB.
И можно ли это дело оформить как представление ?
служивый (2004-05-08 18:09:00) [1]>Johnmen © (03.05.04 16:35) [11]
>Служи дальше. Для тебя дембель ещё далеко...:)
Прошу извинить уважаемый,но на IB 6.5
select * from table rows 10
дает тот результат о котором спрашивал автор
а дембель это хорошо :))
kaif (2004-05-04 14:52:00) [2]select first 10 * from mytable
в Yaffil-е работает. Я только что проверил.
narayan (2004-05-03 23:01:00) [3]2 kaif
Другое решение не требуется.
Нужно это для http://www.delphimaster.ru/cgi-bin/forum.pl?id=1083330901&n=1
А так, вообще-то всё это пока под yaffil.
На счёт процедуры - это первое что мне пришло в голову, но я расчитывал что есть стандортные средства.
Поскольку это место в не критичное, можно в принципе, и в программе ограничить кол-во записей.
Ладно. Нет так нет. Всё равно, спасибо.
kaif (2004-05-03 20:36:00) [4]Пардон, в таблице: id integer not null.
И в запросе забыл поля указать:
select *from mytable_first_n_select(10)
kaif (2004-05-03 20:34:00) [5]Универсальное для любого IB решение:
Предположим имеется таблица mytable
create table mytable(id integer, name varchar(50),
constraint pk_mytable primary key(id));
создаеся хранимая процедура:
create procedure mytable_first_n_select(n integer)
returns(id integer, name varchar(50))
as
begin
for select id, name from mytable
order by id
into :id, :name
do
begin
if n = 0 then
exit;
else
suspend;
n = n - 1;
end
end
Далее делается запрос
select from mytable_first_n_select(10)
Получаешь 10 "первых" записей. Если первыми 10 записями называть первые 10 в наборе, упорядоченном по id.
А зачем это нужно? Если опишете задачу, может быть найдем другие решения. Например, перейти на Firebird и использовать его опцию в select, позволяющую решать эту задачу. Или может проще выбрать все записи, а фетчить только первые N. Это тоже неплохое решение в некоторых случаях. А может быть вообще этот путь неверный. Все от задачи зависит...
Johnmen (2004-05-03 16:35:00) [6]>служивый (03.05.04 15:56) [10]
Служи дальше. Для тебя дембель ещё далеко...
:)
служивый (2004-05-03 15:56:00) [7]>>Как выбрать n первых записей в IB.
rows n
Anatoly Podgoretsky (2004-05-03 15:47:00) [8]narayan © (03.05.04 15:39) [8]
Очень просто, для этого надо иметь пронумерованое без дырок поле и использовать в выборке предикат between
narayan (2004-05-03 15:39:00) [9]2 Кщд
1. если можно получить ровно 10 записей, сформулировав соответствующее условия в where, то почему бы этого не сделать? :)
А всё таки, как надо "сформулировать соответствующее условия в where"что бы "получить ровно 10 записей"??
Кщд (2004-05-03 15:33:00) [10]narayan © (03.05.04 12:57) [6]
не грубите и не грубимы будете
narayan © (03.05.04 11:44) [4]
не знаете for select - в доку
знаете - в чем вопрос?
narayan (2004-05-03 12:57:00) [11]2 ss300 © (03.05.04 12:33) [5]
это чушь
ss300 (2004-05-03 12:33:00) [12]2 narayan
1) добавь в таблице дополнительное поле id
2) напиши триггер, типа автоинкремента для поля id
3) select * from table where id<20;
narayan (2004-05-03 11:44:00) [13]2 Кщд (03.05.04 10:44) [3]
кусочек кода всегда лучше длинных объяснений
Кщд (2004-05-03 10:44:00) [14]1. если можно получить ровно 10 записей, сформулировав соответствующее условия в where, то почему бы этого не сделать? :)
2. ещё вариант - хранимая процедура
narayan (2004-05-03 10:39:00) [15]2 Кщд (03.05.04 10:37) [1]
можно по подробнее про манипуляции
Кщд (2004-05-03 10:37:00) [16]в FB - select first n
в IB - посредством манипуляций с where