Проблема с MySQL between

elitedesign
На сайте с 25.10.2012
Offline
69
472

Всем привет!

$sql = "SELECT DISTINCT(`zakaz_id`) FROM `zakaz_history` WHERE `date` BETWEEN '2018-12-06 00:00:00' AND '2018-12-12 23:59:59' ORDER BY `zakaz_id` DESC";

Выводит значения с уникальным полем zakaz_id но также выводит и те, у кого поле date выходит за заданный диапазон указанный в between (например выводит и те записи, где date = 01.04.2018 20:22:14). Не могу понять почему between не работает. Ткните плиз в мою ошибку, сразу на ум ничего не приходит.

Формат поля date в MySQL: timestamp (CURRENT_TIMESTAMP). Пример записи в поле date: 2018-04-09 22:51:49

webiumpro
На сайте с 20.03.2017
Offline
39
#1

Время к дате попробуйте добавить. И формат даты соблюдайте.

$sql = "SELECT DISTINCT(`zakaz_id`) FROM `zakaz_history` WHERE `date` BETWEEN '2018-12-06 00:00:00' AND '2018-12-12 23:59:59' ORDER BY `zakaz_id` DESC";
Копирование лендингов. Разработка на фреймворке сервисов. Создание сайтов (/ru/forum/994418)
elitedesign
На сайте с 25.10.2012
Offline
69
#2
webiumpro:
Время к дате попробуйте добавить. И формат даты соблюдайте.

$sql = "SELECT DISTINCT(`zakaz_id`) FROM `zakaz_history` WHERE `date` BETWEEN '2018-12-06 00:00:00' AND '2018-12-12 23:59:59' ORDER BY `zakaz_id` DESC";

Спасибо, подправил первый пост. Соблюдаю формат, время тоже указываю. Проблема все равно есть. Почему то выводятся записи у которых дата за пределами диапазона.

webiumpro
На сайте с 20.03.2017
Offline
39
#3

А зачем вам distinct, если поле уникальное?

---------- Добавлено 12.12.2018 в 20:18 ----------

Я проверил у себя в базе. Если указывать правильный формат даты, даже без времени правильно отрабатывает. Вы уверены, что у вас даты в поле лежат в одном формате?

elitedesign:
но также выводит и те, у кого поле date выходит за заданный диапазон указанный в between (например выводит и те записи, где date = 01.04.2018 20:22:14)

1.04.2018 или все-таки 2018-04-01?

АБ
На сайте с 22.11.2018
Offline
26
#4

SHOW CREATE TABLE zakaz_history можете показать?

elitedesign
На сайте с 25.10.2012
Offline
69
#5
А зачем вам distinct, если поле уникальное?

Выборка идет из таблицы содержащий записи логов звонков. Там поле zakaz_id не уникальное. Дубли есть, поскольку по одному заказу могут звонить несколько раз.

1.04.2018 или все-таки 2018-04-01?

Я когда первый раз постил, не скопировал запрос а ручками написал, поэтому допустил опечатку.

Вот мой запрос:

$sql = "SELECT DISTINCT(`zakaz_id`) FROM `zakaz_history` WHERE `date` BETWEEN '2018-12-06 00:00:00' AND '2018-12-12 23:59:59' ORDER BY `zakaz_id` DESC";

SHOW CREATE TABLE zakaz_history можете показать?

LEOnidUKG
На сайте с 25.11.2006
Offline
1723
#6

Оффтоп, на zakaz_id и date индексы проставьте.

✅ Мой Телеграм канал по SEO, оптимизации сайтов и серверов: https://t.me/leonidukgLIVE ✅ Качественное и рабочее размещение SEO статей СНГ и Бурж: https://getmanylinks.ru/
webiumpro
На сайте с 20.03.2017
Offline
39
#7

Вы явно что-то где-то упускаете и нам это не показываете. Сделайте 3 скрина: просто содержимое таблицы, ваш запрос и результат его выполнения (желательно на том месте, где выводятся неправильные записи, и с выводом даты, чтобы было видно, что запись не соответствует условию)

elitedesign
На сайте с 25.10.2012
Offline
69
#8
webiumpro:
Вы явно что-то где-то упускаете и нам это не показываете.

Вы абсолютно правы. Спасибо всем за помощь и содействие. Строка запроса изначально была правильной. Проблема была в другом. У меня внутри еще 1 выборка была, которая косячила.

Бывает, что когда программишь вечером, мозг уже не так шустро справляется с задачами как утром.

Всем большое спасибо. Удачного вечера!

Оффтоп, на zakaz_id и date индексы проставьте.

Спасибо, уже сделано

Авторизуйтесь или зарегистрируйтесь, чтобы оставить комментарий