|
|
Регистрация Восстановить пароль |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
Опции темы | Поиск в этой теме |
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
|
Цитата:
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. Ну что ж, будем считать это замечание "между делом" определяющим. Спасибо ещё раз! |
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
действия после нажатия кнопки, 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 |