Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2003.06.19;
Скачать: CL | DM;

Вниз

Как подбить количество возращаемых записей?   Найти похожие ветки 

 
YuraKiller ©   (2003-05-25 15:38) [0]

Мне нужно узнать количество записей результатирующего набора.
Как это можно красиво сделать?

Запрос например: select * from main where type=10 and code>100

Как это можно сделать не посылая : select count(*) from main where type=10 and code>100 ещё раз.

Может есть какое-то свойство или оператор?...


 
Engel ©   (2003-05-25 15:41) [1]

query.recordcount


 
Sergey Masloff   (2003-05-25 20:17) [2]

>Как это можно сделать не посылая : select count(*) from main >where type=10 and code>100 ещё раз.
Все остальные способы приводят к фетчу ВСЕХ записей на клиента. Так что хорошо подумай, может стоит сделать select count(*) и узнать что там таких записей полтора миллиона или узнать об этом же после получаса ожидания пока они тебе на клиента приползут?


 
DrPass ©   (2003-05-25 21:44) [3]

select count(*) - это и есть самый красивый и разумный вариант


 
YuraKiller ©   (2003-05-27 01:33) [4]

Пасибо!


 
Verg ©   (2003-05-27 08:46) [5]

Если транзакция readcommited,


select * from main where type=10 and code>100


... а здесь в другой транзакции в main были добавлены/удалены записи удовлетворяющие условию и сделан commit, то


select count(*) from
main where type=10 and code>100 ещё раз.


...будет ли результат второго запроса равен колечеству выбранных записей в первом?


 
Danilka ©   (2003-05-27 08:54) [6]

Verg © (27.05.03 08:46)
угу, и для "обьективной реальности" остается только уйти нафиг с IB на сервак поддерживающий транзакции Dirty Read, и на нем уже делать count(*)
;))


 
Alexandr ©   (2003-05-27 09:01) [7]

2Verg © если очень хочется, сделай repeatableRead транзакцию.

2Danilka © DBF? Paradox? Все что вы пишите есть бред сивой кобылы.


 
Verg ©   (2003-05-27 09:06) [8]


> Alexandr © (27.05.03 09:01)


Мне-то чего хочется?

Вопрос по-моему "простой" - где берут RowsAffected в IB?


 
Danilka ©   (2003-05-27 09:11) [9]

Alexandr © (27.05.03 09:01)
тема ветки, вообще-то IB5.x
к тому-же, похоже, даже смайлики не на всех действуют :))


 
Danilka ©   (2003-05-27 09:19) [10]

Alexandr © (27.05.03 09:01)
Ладно, разжую, там где есть транзакции, невозможно на 100% с уверенностью сказать, сколько реально записей в таблице в данный момент.
Конечно, таблицы и задачи, в которых идет вставка новых записей несколько штук в секунду очень-очень редки, и в любом случае, для них нет необходимости смотреть кол-во записей.
В то-же время, при наличии даже двух пользователей есть какая-то вероятность, что количество, например, счетов-фактур через секунду будет на 1 больше, чем только-что показал count(*)

Да и там где транзакций нет, тоже нельзя с 100% уверенностью сказать что секунду назад сделаное count(*) - правильное. :))


 
Orlan Master   (2003-05-27 13:41) [11]

На всякий случай: именно там, где есть транзакции, можно с уверенностью сказать, сколько записей было на момент транзакции. Просто операцию по расчету кол-ва записей необходимо производить ВНУТРИ ОДНОЙ И ТОЙ ЖЕ ТРАНЗАКЦИИ, а уровень изоляции не должен быть DirtyRead (ReadUncommited). Для MSSQL, например, если выборка делается из хранимки, то можно кол-во записей впендюрить в переменную, и ее значение считать непосредственно из переменной. Иными словами, из хранимки можно одновременно получить и селектовую выборку и значения возвращаемых переменных.
М.б. в IB есть нечто похожее.


 
YuraKiller ©   (2003-05-28 00:50) [12]

Да.., ну Вы и бадягу замесили.. :-))


 
Proton ©   (2003-05-28 07:55) [13]

Наверное в данном случае пользователя устроит "приблизительное" количеество записей. А если он будет выводить данные то он всегда сможе использовать recordcount.


 
Danilka ©   (2003-05-28 08:00) [14]

Proton © (28.05.03 07:55)
Ладно, признаюсь, с моей стороны все посты в этой ветке - просто флуд, сначала на:
Verg © (27.05.03 08:46)
на то утверждение, что если одна транзакция меняет данные, то транзакция стартовавшая раньше их не видит, я начал флудить что в могопользовательских БД всегда есть вероятность того, что данные устарели.

Можно их смело прибить.



Страницы: 1 вся ветка

Текущий архив: 2003.06.19;
Скачать: CL | DM;

Наверх




Память: 0.5 MB
Время: 0.023 c
7-60450
Grebenyuk
2003-04-14 22:36
2003.06.19
Перенаправление из LPT1 -> USB


1-60153
Shluz
2003-06-06 18:39
2003.06.19
Проект без форм....


1-60245
vlv
2003-06-05 20:37
2003.06.19
Как преобразовать строку, содержащую 16-тиричное выражение?


3-60060
GreySerg
2003-05-28 11:40
2003.06.19
Как восстановить базу данных Interbase 5.5 ?


14-60413
MicroWorld
2003-06-03 15:00
2003.06.19
interbase