MySQL выбрать между двумя датами не работает, как ожидалось
Я пытаюсь создать запрос, который будет выбирать все даты между двумя датами
Это мой запрос:
$query = "SELECT DISTINCT * FROM D1,D2
WHERE D1.DATE_ADDED BETWEEN '$date1' AND '$date2' AND D1.D1_ID = D2.D2_ID";
Проблема в том, что он ничего не возвращает, но и не выдает ошибку
Поэтому я попытался ввести его прямо в phpMyAdmin, как это
SELECT DISTINCT * FROM D1,D2
WHERE D1.DATE_ADDED BETWEEN '2011-01-01' AND '2011-12-12'
AND D1.D1_ID = D2.D2_ID`
тогда вот так
SELECT DISTINCT * FROM D1,D2
WHERE D1.DATE_ADDED BETWEEN '2011-01-01' AND '2011-12-12'
а вот так
SELECT * FROM D1
WHERE DATE_ADDED BETWEEN '2011-01-01' AND '2011-12-12'
и я просто получаю
MySQL вернул пустой набор результатов (т. Е. Ноль строк). (Запрос занял 0,0003 секунды)
Да, мои таблицы существуют, как и столбцы:)
3 ответа
В первых случаях отсутствие результатов может быть связано с внутренним объединением. Чтобы результат был в наборе, он потребовал бы записи в обеих таблицах, т.е. запись из d1 не появится, если только d2 не имеет этот идентификатор в столбце d2_id. Чтобы решить эту проблему, если это правильно для вашей бизнес-логики, используйте left join
,
Однако последний из ваших случаев (без объединения) предполагает, что причина заключается в отсутствии соответствующих записей в первой (левой) таблице d1.
Без полного набора данных мы не сможем комментировать дальше, так как весь код, который вы запускаете, совершенно корректен.
Пожалуйста, используйте ниже код
SELECT DISTINCT * FROM D1,D2
WHERE D1.DATE_ADDED BETWEEN DATE_FORMAT('2011-01-01','%Y-%m-%d')
AND DATE_FORMAT('2011-12-12','%Y-%m-%d')
AND D1.D1_ID = D2.D2_ID`
Если вы всегда хотите выбрать целый год, проще выбрать его следующим образом:
SELECT * FROM D1 WHERE YEAR(DATE_ADDED) = 2011;