|
|
|
Количество записей SELECT
|
|||
|---|---|---|---|
|
#18+
Здравствуйте! Выполняю SQLExecDirect(..., "SELECT * FROM table",...). Как мне узнать количество записей, которые вернулись? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.02.2007, 16:33 |
|
||
|
Количество записей SELECT
|
|||
|---|---|---|---|
|
#18+
Например выполнить еще один запрос SELECT Count(*) FROM table ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.02.2007, 16:46 |
|
||
|
Количество записей SELECT
|
|||
|---|---|---|---|
|
#18+
Плохо, еще раз к базе обращаться... Я сделал один раз селект и хочу узнать количество записей ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.02.2007, 16:50 |
|
||
|
Количество записей SELECT
|
|||
|---|---|---|---|
|
#18+
OIOПлохо, еще раз к базе обращаться... Я сделал один раз селект и хочу узнать количество записейтогда читай все записи с сервера и считай в процессе ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.02.2007, 17:01 |
|
||
|
Количество записей SELECT
|
|||
|---|---|---|---|
|
#18+
Это как? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.02.2007, 17:52 |
|
||
|
Количество записей SELECT
|
|||
|---|---|---|---|
|
#18+
OIOЭто как?в цикле Next и counter++ до конца набора данных; ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.02.2007, 17:53 |
|
||
|
Количество записей SELECT
|
|||
|---|---|---|---|
|
#18+
А понял, но это не подходит - мне прийдется перелапатить все записи, а если их 1.000.000, мне нужно предупредить пользователя о масштабе трагедии:) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.02.2007, 18:01 |
|
||
|
Количество записей SELECT
|
|||
|---|---|---|---|
|
#18+
OIOА понял, но это не подходит - мне прийдется перелапатить все записи, а если их 1.000.000, мне нужно предупредить пользователя о масштабе трагедии:) Когда час пройдет, сообщи ему, чтобы пошел покурить пока. ;) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.02.2007, 18:02 |
|
||
|
Количество записей SELECT
|
|||
|---|---|---|---|
|
#18+
ХП как вариант. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.02.2007, 18:05 |
|
||
|
Количество записей SELECT
|
|||
|---|---|---|---|
|
#18+
Что такое ХП? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.02.2007, 18:14 |
|
||
|
Количество записей SELECT
|
|||
|---|---|---|---|
|
#18+
OIOЧто такое ХП? Хранимая процедура. Тебе данные не надо будет переганять. Только число. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.02.2007, 18:27 |
|
||
|
Количество записей SELECT
|
|||
|---|---|---|---|
|
#18+
Не очень понимаю, как она поможет... объясните по подробнее пжлста. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.02.2007, 18:40 |
|
||
|
Количество записей SELECT
|
|||
|---|---|---|---|
|
#18+
OIOА понял, но это не подходит - мне прийдется перелапатить все записи, а если их 1.000.000, мне нужно предупредить пользователя о масштабе трагедии:)тогда SnowMan2Например выполнить еще один запрос SELECT Count(*) FROM table Либо считает сервер, либо клиент, третьего не дано. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.02.2007, 19:00 |
|
||
|
Количество записей SELECT
|
|||
|---|---|---|---|
|
#18+
Нет, я в упор не понимаю, неужели никто не думал как это по-людски сделать? То, что вы предлагаете, и на стороне клиента, и на стороне сервера перелапачивает уже полученный набор еще раз. Должно ведь куда-то попадать результирующее количество записей. В СУДБ есть переменная @@ROWCUNT, просто у меня не получается прилепить ее к результирующему множеству. Наверняка должен быть способ, получить количество записей, не перебирая их в тупую. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.02.2007, 19:16 |
|
||
|
Количество записей SELECT
|
|||
|---|---|---|---|
|
#18+
OIOНаверняка должен быть способ, получить количество записей, не перебирая их в тупую.Строго говоря, не должен. Более того, возможны ситуации, когда это в принципе невозможно. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.02.2007, 19:23 |
|
||
|
Количество записей SELECT
|
|||
|---|---|---|---|
|
#18+
В любом случае набор записей сервер вернул клиенту, почему не должно быть способа получить количество записей этого набора? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.02.2007, 19:36 |
|
||
|
Количество записей SELECT
|
|||
|---|---|---|---|
|
#18+
OIOВ любом случае набор записей сервер вернул клиенту, почему не должно быть способа получить количество записей этого набора?Сервер возвращает клиенту не весь набор записей, а ровно то количество, которое клиент запросил. Остальные записи сервер может даже не вычислять. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.02.2007, 19:37 |
|
||
|
Количество записей SELECT
|
|||
|---|---|---|---|
|
#18+
OIOНет, я в упор не понимаю, неужели никто не думал как это по-людски сделать? То, что вы предлагаете, и на стороне клиента, и на стороне сервера перелапачивает уже полученный набор еще раз. Должно ведь куда-то попадать результирующее количество записей. В СУДБ есть переменная @@ROWCUNT, просто у меня не получается прилепить ее к результирующему множеству. Наверняка должен быть способ, получить количество записей, не перебирая их в тупую. Думаю этот вопрос лучше задать в профильный форум по вашему серверу. И посмотреть еще раз на API, которым пользуетесь для доступа к базе. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.02.2007, 19:42 |
|
||
|
Количество записей SELECT
|
|||
|---|---|---|---|
|
#18+
для ODBC посмотрите на SQLGetDiagRec и SQLGetDiagField, они предоставляют диагностичискую информацию для дескриптора. может, и количество записей там будет, а мож и ответ сервера типа "xxx rows selected" ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.02.2007, 20:38 |
|
||
|
Количество записей SELECT
|
|||
|---|---|---|---|
|
#18+
SnowMan2 пишет: > Например выполнить еще один запрос > SELECT Count(*) FROM table Это бесполезно. Два запроса никак не связаны между собой. Не факт что потом ТОТ запрос вернет именно ЭТО количество строк. Posted via ActualForum NNTP Server 1.3 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.02.2007, 21:16 |
|
||
|
Количество записей SELECT
|
|||
|---|---|---|---|
|
#18+
miksoft пишет: > Плохо, еще раз к базе обращаться... Я сделал один раз селект и хочу > узнать количество записей > > тогда читай все записи с сервера и считай в процессе Правильно, это единстенно правильный вариант. Posted via ActualForum NNTP Server 1.3 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.02.2007, 21:16 |
|
||
|
Количество записей SELECT
|
|||
|---|---|---|---|
|
#18+
OIO пишет: > А понял, но это не подходит - мне прийдется перелапатить все записи, а > если их 1.000.000, мне нужно предупредить пользователя о масштабе трагедии:) Другого варианта все равно нет. Posted via ActualForum NNTP Server 1.3 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.02.2007, 21:17 |
|
||
|
Количество записей SELECT
|
|||
|---|---|---|---|
|
#18+
OIO пишет: > Не очень понимаю, как она поможет... объясните по подробнее пжлста. Да никак она не поможет. Posted via ActualForum NNTP Server 1.3 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.02.2007, 21:18 |
|
||
|
Количество записей SELECT
|
|||
|---|---|---|---|
|
#18+
OIO пишет: > попадать результирующее количество записей. В СУДБ есть переменная > @@ROWCUNT, просто у меня не получается прилепить ее к результирующему > множеству. Наверняка должен быть способ, получить количество записей, не > перебирая их в тупую. Да ты можешь его прилепить, для этого достаточно после этого SELECT-а сделать еще один, SELECT @@rowcount. Но смысла это делать нет никакого, потому что ты получишь его только ПОСЛЕ выборки основного набора данных. А если ты уже выберишь его, то ты уже будешь знать количество строк. Posted via ActualForum NNTP Server 1.3 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.02.2007, 21:20 |
|
||
|
Количество записей SELECT
|
|||
|---|---|---|---|
|
#18+
OIO пишет: > Выполняю SQLExecDirect(..., "SELECT * FROM table",...). > Как мне узнать количество записей, которые вернулись? Короче, резюмирую. Чтобы узнать количество записей , которые вернулись, есть два способа. 1) Профетчить все записи и посчитать их. (SQLFetch() ... ) 2) Вызвать SQLRowCount() --- не торопитесь радоваться. SQLRowCount() не гарантирует возвращение количества записей до того, как вы не профетчите все записи. И даже больше - в последних редакциях ODBC он для SELECT-а вообще ничего не гарантирует (и это правильно!). Так что фактически при наличии двух способов способ этот на самом деле только один. Posted via ActualForum NNTP Server 1.3 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.02.2007, 21:34 |
|
||
|
Количество записей SELECT
|
|||
|---|---|---|---|
|
#18+
OIOНе очень понимаю, как она поможет... объясните по подробнее пжлста. быстрее. Данные не будут передаваться. Сервер только по таблице пробежитсья ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.02.2007, 10:00 |
|
||
|
Количество записей SELECT
|
|||
|---|---|---|---|
|
#18+
MasterZiv SnowMan2 пишет: > Например выполнить еще один запрос > SELECT Count(*) FROM table Это бесполезно. Два запроса никак не связаны между собой. Не факт что потом ТОТ запрос вернет именно ЭТО количество строк. Насколько я понял, автору требуется примерное количество. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.02.2007, 10:01 |
|
||
|
Количество записей SELECT
|
|||
|---|---|---|---|
|
#18+
2 MasterZiv Насоветовал тоже человеку проходить по миллиону записей. У него будет такие тормоза, что начальство не поймет. Запрос SELECT count(*) FROM Table - выполняется мгновенно. Сервер не проходит по всем записям, у него другие методы. Результат - одно число, так что сетка не перегружается. Если конечно в таблицу не вводят новые записи обновременнно 50 пользователей, и между запрсами SELECT count(*) FROM Table и SELECT * FROM Table никто не успел добавить или удалить запись (времени очень мало, доли секунды), то число записей будет правильным, иначе отличаться на число добавленных или удаленных (читай на 1). Кол-во обращений к серверу не критачно, при хорошей работе их сотни или тысячи. 2 OIO Тут исходя из задачи надо подумать, а надо ли пользователю миллион записей. Если он их все будет просматривать, то это одно дело. Хотя просмотр большого кол-ва информации не приводит к ее усвоению. А если на основе этой информации надо строить каки-то интегральные составляющие (суммы, средние значения, min, max и др.) то надо пользоваться агрегатными функциями SQL и группировками. Если более сложнвми характеристиками, требующими программирования, то хранимими процедурами или функциями сервера. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.02.2007, 10:23 |
|
||
|
Количество записей SELECT
|
|||
|---|---|---|---|
|
#18+
SnowMan2Запрос SELECT count(*) FROM Table - выполняется мгновенно. Сервер не проходит по всем записям, у него другие методы.Это верно только для этого тривиального запроса, только для некоторых СУБД и только в некоторых случаях. В большинстве остальных случаев будет полный скан таблицы или индекса. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.02.2007, 11:33 |
|
||
|
Количество записей SELECT
|
|||
|---|---|---|---|
|
#18+
Я понял, что это не тривиальная задача, буду просто иметь это ввиду и постараюсь обойтись без количества записей. 2SnowMan2 select * from table - это просто как пример привел от которого отталкиваться, имелось ввиду все же определение количества записей, которые вернул select, отнюдь не с тривиальными условиями, которые несут нагрузку на сервер, и хотелось избежать повторного прохождения по таблице. В любом случае, спасибо всем за помощь и обсуждение этого вопроса. Отрицательный ответ - тоже ответ. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.02.2007, 11:58 |
|
||
|
Количество записей SELECT
|
|||
|---|---|---|---|
|
#18+
SnowMan2 пишет: > Насоветовал тоже человеку проходить по миллиону записей. У него будет > такие тормоза, что начальство не поймет. Где ты взял про миллионы записей ? И где я такое советовал ? > Запрос SELECT count(*) FROM Table - выполняется мгновенно. Сервер не > проходит по всем записям, у него другие методы. Результат - одно число, > так что сетка не перегружается. Ну не всегда так происходит, и не везде. Не во всех СУБД. И в одной СУБД не во всех случаях. > Тут исходя из задачи надо подумать, а надо ли пользователю миллион > записей. Если он их все будет просматривать, то это одно дело. Хотя Ты когда нибудь просматривал миллионы записей ? Posted via ActualForum NNTP Server 1.3 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.02.2007, 12:49 |
|
||
|
Количество записей SELECT
|
|||
|---|---|---|---|
|
#18+
OIO пишет: > Я понял, что это не тривиальная задача, буду просто иметь это ввиду и Да неправильно ты понял, это ВООБЩЕ НЕВОЗМОЖНО. Задача нерешаема в общем случае. Posted via ActualForum NNTP Server 1.3 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.02.2007, 12:50 |
|
||
|
Количество записей SELECT
|
|||
|---|---|---|---|
|
#18+
MasterZivSnowMan2 пишет: > Насоветовал тоже человеку проходить по миллиону записей. У него будет > такие тормоза, что начальство не поймет. Где ты взял про миллионы записей ? И где я такое советовал ? В 8-ом сообщении от начала топика OIO пишет про миллион записей. После чего ты пишешь: > тогда читай все записи с сервера и считай в процессе Правильно, это единстенно правильный вариант. MasterZiv> Тут исходя из задачи надо подумать, а надо ли пользователю миллион > записей. Если он их все будет просматривать, то это одно дело. Хотя Ты когда нибудь просматривал миллионы записей ? Нет не просмативал. Я противник такого рассмотрения и после слова хотя идет текст о том, что нужно использовать агригатные функции и группировки чтобы видеть не исходные данные, а какие-то результаты. miksoft >SnowMan2 >Запрос SELECT count(*) FROM Table - выполняется мгновенно. Сервер не проходит по всем >записям, у него другие методы. Это верно только для этого тривиального запроса, только для некоторых СУБД и только в некоторых случаях. В большинстве остальных случаев будет полный скан таблицы или индекса. Специально провел эксперимент. Условия: Pentium IV, 1400 MHz, 256 Mb. Сервер MSDE 2000 (бесплатный). Таблица 159406 строк, 12 полей (в оновном целочисленные). Локальный вариант. Код: plaintext 1. 2. 3. 4. 5. 6. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.02.2007, 19:59 |
|
||
|
Количество записей SELECT
|
|||
|---|---|---|---|
|
#18+
SnowMan2 miksoft >SnowMan2 >Запрос SELECT count(*) FROM Table - выполняется мгновенно. Сервер не проходит по всем >записям, у него другие методы. Это верно только для этого тривиального запроса, только для некоторых СУБД и только в некоторых случаях. В большинстве остальных случаев будет полный скан таблицы или индекса. Специально провел эксперимент. Условия: Pentium IV, 1400 MHz, 256 Mb. Сервер MSDE 2000 (бесплатный). Таблица 159406 строк, 12 полей (в оновном целочисленные). Локальный вариант. Код: plaintext 1. 2. 3. 4. 5. 6. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.02.2007, 08:16 |
|
||
|
Количество записей SELECT
|
|||
|---|---|---|---|
|
#18+
SnowMan2 пишет: > Это верно только для этого тривиального запроса, только для некоторых > СУБД и только в некоторых случаях. В большинстве остальных случаев будет > полный скан таблицы или индекса. > Специально провел эксперимент. Условия: Pentium IV, 1400 MHz, 256 Mb. > Сервер MSDE 2000 (бесплатный). Таблица 159406 строк, 12 полей (в оновном > целочисленные). Локальный вариант. Ну и о чем это говорит ? Даже если это и так, как ты написал, я ЕЩЕ РАЗ повторяю, что НЕ НА ВСЕХ СУБД, и НЕ НА ВСЕХ ЗАПРОСАХ это будет так. Ладно, тему считаю закрытой, поскольку дальнейшее обсуждение бессмысленно без конкретики СУБД, запросов, таблиц и пр. Posted via ActualForum NNTP Server 1.3 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.02.2007, 10:13 |
|
||
|
Количество записей SELECT
|
|||
|---|---|---|---|
|
#18+
MasterZiv Да ты можешь его прилепить, для этого достаточно после этого SELECT-а сделать еще один, SELECT @@rowcount. Но смысла это делать нет никакого, потому что ты получишь его только ПОСЛЕ выборки основного набора данных. А если ты уже выберишь его, то ты уже будешь знать количество строк. Точно? а по-моему будет 2 рекордсета переданы - фетчи какой хочешь... надо бы проверить.. 3) в mssql можно юзать Код: plaintext 1. Код: plaintext 1. 2. 3. 4. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.02.2007, 15:04 |
|
||
|
Количество записей SELECT
|
|||
|---|---|---|---|
|
#18+
Палестинец... Код: plaintext 1. 2. 3. 4. наконец то хоть одын нормальный ответ...Вы это чаво мужики ? Ни разу с такой фиговой задачей не сталкивались ? я даже подумал - во прикалываются :) есть правда одно но, возможно это и имелось в ввиду...Что дескать возвращать по разным условиям (каунт и сам запрос) - в вопросе об этом вроде как ни слова... с уважением (круглый) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.02.2007, 15:08 |
|
||
|
Количество записей SELECT
|
|||
|---|---|---|---|
|
#18+
Так уже как бы выше обсуждалось, что count(*) - это здорово, но как потом профетчить этот результат, ведь он вернется после всех записей? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.02.2007, 15:11 |
|
||
|
Количество записей SELECT
|
|||
|---|---|---|---|
|
#18+
OIOТак уже как бы выше обсуждалось, что count(*) - это здорово, но как потом профетчить этот результат, ведь он вернется после всех записей? уже выше показали - его можно вернуть как поле, а не как запись...минус подхода - Вы это поле будете обрабатывать в каждой запси возвращаемого рекордсета... с уважением (круглый) ЗЫ Задам самый вредный вопрос... Нафига Вам это всё ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.02.2007, 15:37 |
|
||
|
Количество записей SELECT
|
|||
|---|---|---|---|
|
#18+
Я думаю, такой подход не буду использовать из-за необходимости возиться еще с одним полем - не удобно... Просто мне было бы удобно знать количество записей до того как их выдавать. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.02.2007, 16:13 |
|
||
|
Количество записей SELECT
|
|||
|---|---|---|---|
|
#18+
OIO...Просто мне было бы удобно знать количество записей до того как их выдавать. например 100 миллионов - пойдём экстремальным путём... с уважением (круглый) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.02.2007, 16:19 |
|
||
|
Количество записей SELECT
|
|||
|---|---|---|---|
|
#18+
Я сейчас работаю на тестовой версии с 200.000 записей и то операции обновления, удаления занимают порядочно времени, что говорить про такие объемы... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.02.2007, 16:23 |
|
||
|
Количество записей SELECT
|
|||
|---|---|---|---|
|
#18+
OIOоперации обновления, удаления занимают порядочно времениЭто уже отдельная песня. При желании можно и одну запись удалять полдня. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.02.2007, 16:26 |
|
||
|
Количество записей SELECT
|
|||
|---|---|---|---|
|
#18+
Подскажите, пожалуйста начинающему. Из таблицы делается выборка Параметров запроса в операторе WHERE много. Я делаю два запроса к базе данных. Первым запросом к базе опередляется количество записей, удовлетворяющих параметрам, чтобы показать счетчик пользователю: SELECT COUNT(*) FROM items WHERE ... Вторым запросом в базе запрашиваются эти данные, с использованием LIMIT, чтобы можно было сделать постраничный вывод: SELECT head, description, date_add FROM items WHERE ... LIMIT Вопрос: Можно ли совместить оба этих запроса? То есть, чтобы получить общее количество записей в базе, удовлетворяющих параметрам, и сразу запросить часть из них. У меня что-то не получается. То есть примерно так: SELECT COUNT(*), head, description, date_add FROM items WHERE ... LIMIT Не хотелось бы делать несколько или вложенных запросов. База MySQL. Спасибо. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.02.2007, 20:58 |
|
||
|
|

start [/forum/topic.php?all=1&fid=57&tid=2029418]: |
0ms |
get settings: |
8ms |
get forum list: |
14ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
166ms |
get topic data: |
7ms |
get forum data: |
2ms |
get page messages: |
43ms |
get tp. blocked users: |
1ms |
| others: | 214ms |
| total: | 461ms |

| 0 / 0 |
