SQLinfo.ru - Все о MySQL

Форум пользователей MySQL

Задавайте вопросы, мы ответим

Вы не зашли.

#1 18.03.2011 14:48:56

simple
Активист
Зарегистрирован: 25.11.2010
Сообщений: 168

Этот коварный SUM()

Всем привет, заметил такую особенность, если в SELECT присутствует функция SUM(), то функция FOUND_ROWS() выдает 1 даже если таблица пустая! Пример:

SELECT SUM(money) FROM account WHERE user='Petya'// Таблица пуста, ни Пети ни Васи там нет, но FOUND_ROWS() возращает 1, как будто бы выбрана одна строка. Я из за этой особенности 2 дня промучился и случайно обнаружил этот баг или фак или еще что это. smile Подскажите как в таком случае мне выловить событие пустой выборки? SUM() обезателен в запросе.
Спасибо.

Отредактированно simple (18.03.2011 14:49:31)

Неактивен

 

#2 18.03.2011 15:09:13

LazY
_cмельчак
MySQL Authorized Developer and DBA
Зарегистрирован: 02.04.2007
Сообщений: 849

Re: Этот коварный SUM()

А вы выполните свой запрос - SELECT SUM(money) FROM account WHERE user='Petya' - и посмотрите, что он возвращает.

Увидите, что там все-таки есть одна строка. Ведь серверу нужно сообщить результат, даже и в том случае, когда он - NULL (т.е. в таблице нет строк).

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

А так и выловить: проверить, что сумма - NULL. Для этого использовать либо функцию ISNULL(), либо выражение что-то IS NULL/IS NOT NULL - зависит от конкретного случая.
Можно также проверить величину на NULL уже на клиенте.

Неактивен

 

#3 18.03.2011 15:23:13

simple
Активист
Зарегистрирован: 25.11.2010
Сообщений: 168

Re: Этот коварный SUM()

LazY написал:

Увидите, что там все-таки есть одна строка. Ведь серверу нужно сообщить результат, даже и в том случае, когда он - NULL (т.е. в таблице нет строк).

Но если убрать SUM() из запроса то FOUND_ROWS() возращает 0 как и полагается для пустого запроса. За совет спасибо.

Неактивен

 

#4 18.03.2011 16:04:09

LazY
_cмельчак
MySQL Authorized Developer and DBA
Зарегистрирован: 02.04.2007
Сообщений: 849

Re: Этот коварный SUM()

Так то разные вещи.
Когда вы говорите "выбрать мне все строки", то вам не покажут строк, если их нет.
Когда же вы говорите "выбрать мне что-то для всех строк", то вам покажут это что-то в любом случае, разница только в том, чему оно будет равно. Такова логика MySQL.

Неактивен

 

Board footer

Работает на PunBB
© Copyright 2002–2008 Rickard Andersson