|
|
Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
|
Опции темы | Поиск в этой теме | Опции просмотра |
#1
|
|||
|
|||
Помогите с SQL-запросом или, быть может, есть свойство RecordCount...
Добрый вечер.
с SQLLite разбираюсь второй день, еще многого не знаю, но первое, что неприятно удивило: почему после sql-запроса "select * from..." я не могу где-нибудь заранее узнать кол-во записей, которое вернулось в результирующем наборе? (вероятно, разработчики SQLLite просто поленились добавить свойство к объекту (что-нибудь вроде Query.RecordCount), и теперь другим приходится выполнять дублирующий повторный sql-запрос или считать кол-во итераций в цикле (while not Query.EOF do ...). Кстати, в моем случае вариант с циклом не подходит, т.к. результат поиска может содержать тысячи строк, а выводить в интерфейс нужно дозировано (постранично =12 записей на листе). В общем, нет смысла листать всю выборку, только чтобы посчитать кол-во строк... в итоге вот, что я придумал: (предупреждаю - слабонервным лучше не смотреть)) Код:
SELECT * FROM tb_films WHERE tags LIKE '%яблоки%' union SELECT -1, count(*) as Cnt, null, null, null, null, null, null, null, null, null, null, null FROM tb_films WHERE tags LIKE '%яблоки%' ORDER BY id ..благодаря тому, что в поле "id" содержит только положительные значения (и это не автоинкремент), а я задал для второго запроса id=-1, то после сортировки как раз получится, что строка с кол-вом записей (результат выборки) - будет первой по счету! Останется просто считать из нее поле "cnt" (равное кол-ву строк), но не показывать юзеру, а в таблицу вывести только строки начиная со второй!.. получается, по сути, те же 2 одинаковых запроса, зато ОДНИМ заходом! т.е. в коде не придется после select-а закрывать таблицу, чтобы повторно выполнит тот же запрос, но с уже с count(*), снова считывать результат и т.п. вроде работает!) но я, конечно, осознаю, что все это похоже на извращение...)) в связи с этим животрепещущий вопрос: может кто подскажет более правильный (изящный) вариант получения кол-ва строк, которое вернула выборка? p.s. на случай, если это важно: пишу в Delphi 7, работаю с БД с помощью DISQLite |