Как получить первые 200 записей select'a (IB)
в MSSQL есть
select TOP 10 * from pupa;
MySQL
select * from pupa limit 10;
а в IB/FireBird/Yaffil как??
есть база по которой идет поиск, можно задать параметры поиска так, в результате будет порядка 10000 записей.. Ессесно их смотреть нереально. Нужно вывести типа первые 200 и сказать что остальные выводить не буду, нужно усугубить фильтр.
Вот такая беда....
Не нашел как....
в MSSQL есть
select TOP 10 * from pupa;
MySQL
select * from pupa limit 10;
а в IB/FireBird/Yaffil как??
есть база по которой идет поиск, можно задать параметры поиска так, в результате будет порядка 10000 записей.. Ессесно их смотреть нереально. Нужно вывести типа первые 200 и сказать что остальные выводить не буду, нужно усугубить фильтр.
Вот такая беда....
Запросом ты никак не ограничишь :( ...
Но если юзать низкоуровневое IB API - то существует такое понятие, как курсор. Создаешь его и выбираешь только первые 200 записей.
Или если ты, например, пользуешь Delphi - там есть TIBSQL - это обертка для низкоуровневых API - вызовов, он сам тебе создаст курсор и будет по одной записи тянуть данные при каждом вызове Next. Твоя задача - лишь вовремя остановиться...
Хотя и здесь сервак может выбрать чуть больше записей, чем тебе нужно - перед возвратом данных функции, запросившей очередную порцию данных из курсора сервак проверит, не опустошился ли у него внутренний буфер. Он, как правило, небольшой - не более нескольких десятков/сотен записей. Если опустошение произошло, то буфер будет заново заполнен (этими несколькими десятками/сотнями следующих записей), а потом твоей проге возвращена 1 (!) следующая запись. Правда, остальные она уже без задержек получит при следующих обращениях к курсору, т.к. данные уже в буфере. Из-за этого процесс возврата серваком ответа на запрос напоминает пульс - данные идут порциями по несколько записей с интервалами между этими порциями.
Таким образом, возможна все-таки небольшая "холостая" работа сервака, но в терпимых пределах, уж никак не несколько тысяч записей.
Других способов сделать то, что ты хошь - нету... :( По крайней мере, в IB 5.5.
Да, видимо так и придется.
Я тягаю Yaffil через С.., поэтому проблем нет. По идее не должно попадать из-за недовыеденного буфера....
Просто думал, что можно это сделать запросом, и это было бы правильнее.
Но если никак, то что тут поделаешь.
Надо будет сделать предложение девелоперам. Ато у всех есть у тут нету.. Отстой какой-то помоему..
Спасибо за ответ.
Да, видимо так и придется.
Я тягаю Yaffil через С.., поэтому проблем нет. По идее не должно попадать из-за недовыеденного буфера....
Просто думал, что можно это сделать запросом, и это было бы правильнее.
Но если никак, то что тут поделаешь.
Надо будет сделать предложение девелоперам. Ато у всех есть у тут нету.. Отстой какой-то помоему..
Согласен, отстой.
Только если уж говорить о вопиющих недоделках в ведущих серверах БД, то этот отстой на самом деле есть верх совершенства и предел всех мыслимых мечтаний по сравнению с тем отстоем, который сидит в MS SQL Server на протяжении всего времени его существования, включая и новейшую версию 2003 (Yukon)! Я имею в виду то, что в этом, в сущности, отличном серваке, просто потрясающим по многим возможностям и фичам, отсутствует полноценная поддержка... угадайте чего... ССЫЛОЧНОЙ ЦЕЛОСТНОСТИ!!! А точнее, каскадного обновления записей.
Если ты не в курсе, то фигня в чем. Он не позволяет создать связь с каскадным обновлением между двумя таблицами, если они уже связаны, причем необязательно напрямую - хоть и через десяток окружных путей. Все равно создание связи, "замыкающей кольцо", или, как они выражаются, "relationship causing cycles or multiple cascade paths" - категорически запрещено! То есть, связь создать можно, но только без указания каскадных операций! Это просто полный абзац! Нет никаких слов! Все равно что автомобиль, который все делает очень хорошо, только не ездит. Или крутой DVD-плеер, который, опять-же все делает зачепись, только вот диски не воспроизводит! Приходится для каскадных операций выкручиваться несметным количеством триггеров. :((( Причем они даже и не собираются исправлять проблему. Короче, одним словом - Microsoft. Must Die Forever. Подонки.
Не нашел как....
в MSSQL есть
select TOP 10 * from pupa;
MySQL
select * from pupa limit 10;
а в IB/FireBird/Yaffil как??
есть база по которой идет поиск, можно задать параметры поиска так, в результате будет порядка 10000 записей.. Ессесно их смотреть нереально. Нужно вывести типа первые 200 и сказать что остальные выводить не буду, нужно усугубить фильтр.
Вот такая беда....
select [[first N] skip M] * from my_table;
И в FireBird 1.0 и 1.5 и в Yaffil. В самом InterBase тоже есть (начиная с версии 7.0), но синтаксис отличается и я его (за ненадобностью) не знаю.
Читайте доки - они рулез :)
select [[first N] skip M] * from my_table;
И в FireBird 1.0 и 1.5 и в Yaffil. В самом InterBase тоже есть (начиная с версии 7.0), но синтаксис отличается и я его (за ненадобностью) не знаю.
Читайте доки - они рулез :)
Да вот с доками именно и бардак. На сайте Yafiil вообще ничего нету. Ну может это только мне не по глазам....
Да вот с доками именно и бардак. На сайте Yafiil вообще ничего нету. Ну может это только мне не по глазам....
Я ничего там не нашел....:(