Задавайте вопросы, мы ответим
Вы не зашли.
MySQL запросы к таблице user_search:
SELECT COUNT(*) FROM user_search WHERE search_in = 1 AND ((birthday<=NOW()-INTERVAL 18 YEAR));
результат: 40850
SELECT COUNT(*) FROM user_search WHERE search_in = 1;
результат: 40951
SELECT COUNT(*) FROM user_search WHERE search_in = 1 AND (NOT(birthday<=NOW()-INTERVAL 18 YEAR));
результат: 0
Необходимо объяснить что содержиться в 40951-40850 рядах и почему они не попали не под первое, не под третье условие.
Может это как то с типами данных в MySQL связано?!
Неактивен
Совершенно верно. Всё дело в типах данных. Подозреваю, что birthday у Вас целочисленный тип.
Попробуйте выполнить запросы
SELECT COUNT(*) FROM user_search WHERE search_in = 1 AND ((birthday<=NOW()-INTERVAL 1800 YEAR));
и
SELECT COUNT(*) FROM user_search WHERE search_in = 1 AND (birthday<=NOW());
и посмотрите на результат, он будет одинаков - 40850.
Для правильной работы используйте функцию year().
Неактивен
Возможно в birthday NULL. Любая операция с NULL есть NULL.
А вообще SELECT DISTINCT (birthday<=NOW()) from search_in; вам поможет понять
Неактивен
vasya написал:
Совершенно верно. Всё дело в типах данных. Подозреваю, что birthday у Вас целочисленный тип.
Попробуйте выполнить запросы
SELECT COUNT(*) FROM user_search WHERE search_in = 1 AND ((birthday<=NOW()-INTERVAL 1800 YEAR));
и
SELECT COUNT(*) FROM user_search WHERE search_in = 1 AND (birthday<=NOW());
и посмотрите на результат, он будет одинаков - 40850.
Для правильной работы используйте функцию year().
нет, birthday: DATE
Неактивен
Тогда причина (как Вам уже указал rgbeast) в NULL значениях. Выполните
SELECT count(*) FROM user_search WHERE search_in = 1 AND birthday IS NULL;
Как раз и должна получиться искомая разница.
Неактивен