Задавайте вопросы, мы ответим
Вы не зашли.
Всем привет, заметил такую особенность, если в SELECT присутствует функция SUM(), то функция FOUND_ROWS() выдает 1 даже если таблица пустая! Пример:
SELECT SUM(money) FROM account WHERE user='Petya'// Таблица пуста, ни Пети ни Васи там нет, но FOUND_ROWS() возращает 1, как будто бы выбрана одна строка. Я из за этой особенности 2 дня промучился и случайно обнаружил этот баг или фак или еще что это. Подскажите как в таком случае мне выловить событие пустой выборки? SUM() обезателен в запросе.
Спасибо.
Отредактированно simple (18.03.2011 14:49:31)
Неактивен
А вы выполните свой запрос - SELECT SUM(money) FROM account WHERE user='Petya' - и посмотрите, что он возвращает.
Увидите, что там все-таки есть одна строка. Ведь серверу нужно сообщить результат, даже и в том случае, когда он - NULL (т.е. в таблице нет строк).
как в таком случае мне выловить событие пустой выборки?
А так и выловить: проверить, что сумма - NULL. Для этого использовать либо функцию ISNULL(), либо выражение что-то IS NULL/IS NOT NULL - зависит от конкретного случая.
Можно также проверить величину на NULL уже на клиенте.
Неактивен
LazY написал:
Увидите, что там все-таки есть одна строка. Ведь серверу нужно сообщить результат, даже и в том случае, когда он - NULL (т.е. в таблице нет строк).
Но если убрать SUM() из запроса то FOUND_ROWS() возращает 0 как и полагается для пустого запроса. За совет спасибо.
Неактивен
Так то разные вещи.
Когда вы говорите "выбрать мне все строки", то вам не покажут строк, если их нет.
Когда же вы говорите "выбрать мне что-то для всех строк", то вам покажут это что-то в любом случае, разница только в том, чему оно будет равно. Такова логика MySQL.
Неактивен