Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Web программирование > SQL, базы данных
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 10.07.2012, 11:07   #1
Гаврилов
Пользователь
 
Регистрация: 11.05.2012
Сообщений: 85
По умолчанию Правомочно ли применение FOUND_ROWS после SELECT без SQL_CALC_FOUND_ROWS?

Функцию FOUND_ROWS везде рекомендуется применять после SELECT, содержащего LIMIT, и обязательно с опцией SQL_CALC_FOUND_ROWS. По крайней мере, других рекомендаций мне найти не удалось. Но вот факт: уже не первый год я в MySQL (как ранее аналогичные функции в MS SQL, CA Ingres и других СУБД, начиная с DEC Rdb) применяю FOUND_ROWS в процедурах после SELECT, не содержащего ни LIMIT, ни SQL_CALC_FOUND_ROWS, а просто для того, чтобы определить, не равно ли 0 количество выбранных записей. Отсутствие выбранных записей часто вызывало бы ошибку при дальнейшем выполнении процедуры или продолжение её выполнения было бы бессмысленно. И ни разу меня FOUND_ROWS не подводила! Всегда, когда я проверял, FOUND_ROWS показывала количество отселектированных записей правильно.
Вопрос: Как Вы думаете, правильно ли я это делаю при работе с MySQL или есть какие-то факторы против, которых я не учитываю. Меня насторожило, что, специально задавшись целью, я не нашёл такого применения FOUND_ROWS в справочных и учебных материалах или хотя бы где-нибудь в примерах.
Гаврилов вне форума Ответить с цитированием
Старый 17.07.2012, 14:05   #2
Гаврилов
Пользователь
 
Регистрация: 11.05.2012
Сообщений: 85
По умолчанию

А вопрос-то оказался непростой!
Вот уже неделя прошла, как я поместил его на 3-х форумах, и пока не пришло ни одного ответа, несмотря на сотни просмотров (в сумме). Неужели никто не задавался этим вопросом до меня? Что-то не верится.
Гаврилов вне форума Ответить с цитированием
Старый 17.07.2012, 14:36   #3
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 18,922
По умолчанию

Цитата:
везде рекомендуется применять после SELECT, содержащего LIMIT, и обязательно с опцией SQL_CALC_FOUND_ROWS
Насчет везде рекомендуется - читаем по ссылке описание FOUND_ROWS
http://dev.mysql.com/doc/refman/5.0/...functions.html
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Аватар вне форума Ответить с цитированием
Старый 17.07.2012, 15:03   #4
Гаврилов
Пользователь
 
Регистрация: 11.05.2012
Сообщений: 85
По умолчанию

Спасибо, Аватар! Там намного больше информации про FOUND_ROWS, чем до сих пор мне приходилось видеть. Особенно много отрицательных эмоций у меня накопилось относительно постоянно мозолящей глаза в магазинах книги "MySQL - Базовый курс" Шелдона и Мойе. Почти не было случаев, чтобы в этой книге можно было найти ответ на вскочивший вдруг вопрос. Жевание давно пережеванной резины пополам с водой - по сути миллионное описание классического SQL (даже раньше стандарта SQL-92).
Но все-таки однозначного ответа я не увидел и по Вашей ссылке. Про UNION и про то, что надо сначала проверять результат на наличие ошибки - это мне было и раньше известно. Мне бы хотелось увидеть одно из трех:
Применять FOUND_ROWS() после SELECT без LIMIT и без опции SQL_CALC_FOUND_ROWS:
1) Можно всегда (кроме случаев с UNION), дает правильный результат.
ИЛИ
2) Можно иногда (и когда нельзя).
ИЛИ
3) Нельзя никогда, и почему.

Последний раз редактировалось Гаврилов; 17.07.2012 в 15:21.
Гаврилов вне форума Ответить с цитированием
Старый 17.07.2012, 15:16   #5
Гаврилов
Пользователь
 
Регистрация: 11.05.2012
Сообщений: 85
По умолчанию

Простите, я прочитал предложение:
"In the absence of the SQL_CALC_FOUND_ROWS option in the most recent successful SELECT statement, FOUND_ROWS() returns the number of rows in the result set returned by that statement." - вместе со следующим предложением (не заметил точки), а там дальше опять упоминается LIMIT.
Ну что ж, будем считать это замечание "между делом" определяющим.
Спасибо ещё раз!
Гаврилов вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
действия после нажатия кнопки, select ubun JavaScript, Ajax 4 04.01.2012 00:45
После SELECT через IBDataSet ошибка EIBClientError 'Not in edit mode' DiMoN2002 Общие вопросы C/C++ 0 23.11.2009 20:51
Как двигаться по данным после select? _ozzy_ SQL, базы данных 5 30.06.2008 09:33
Как двигаться по записям после Select? _ozzy_ БД в Delphi 5 17.06.2008 15:53
Как обновить GridView после изменения SELECT в SqlDataSource? posdnyaa БД в Delphi 2 21.04.2008 11:55