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;

Другие вопросы по тегам