Наборы, фильтр по полю Дата

InstantCMS 2.X
#1 7 апреля 2018 в 22:58
Доброго времени!
Что то не пойму как работает фильтр в наборах по полю дата, нужно для подобия календаря событий
Вот например как вывести записи, которые пройдут в течении 7 дней? В записи использую тип поля "Дата" при добавлении записи указываю нужную дату (09.04.2018), в наборах выполняю фильтр по полю "Дата" и ставлю не старше 7 дней, но в списке показывается еще и запись с значением 07.06.2018
#2 9 апреля 2018 в 23:27
Jestik,
Включите отладку и запрос в базу, который этот датасет выводит, гляньте. Может там будет какое-то объяснение феномену?
#3 12 апреля 2018 в 12:46
Ris, не совсем понял) Мне кажется дело в моей криворукости) Но вроде все варианты перебрал а нужного результата не получил
#4 12 апреля 2018 в 13:04

не совсем понял)

Jestik
Ну в отладке выводятся запросы sql и запрос, в котором есть что-то типа FORCE INDEX (системное имя вашего датасета) и надо посмотреть.
#5 12 апреля 2018 в 14:17
Ris,

SELECT COUNT( i.id ) as count
FROM que_con_poster i
FORCE INDEX FOR ORDER BY (dataset_week)
WHERE (i.dateof >= DATE_SUB(NOW(), INTERVAL 7 DAY)) AND (i.is_parent_hidden IS NULL) AND (i.is_approved = '1') AND (i.is_deleted IS NULL) AND (i.is_pub = '1')


Просто как то нигде инфы нету по настройке и использованию этого поля в наборах…
#6 12 апреля 2018 в 16:51
Jestik,
На вид все правильно.
Вот это вот условие фильтрует записи, где dateof (кстати, что это за поле? сами добавляли?) больше или равно текущая дата + 7 дней
  1. i.dateof >= DATE_SUB(NOW(), INTERVAL 7 DAY)
Проверьте эту запись, которая от 07.06.2018. Может там эта dateof в каком-то неправильном формате записана? Попробуйте её вручную переписать.
#7 12 апреля 2018 в 18:32

dateof

Ris
Угу, это поле типа "Дата"

Формат:
2018-04-09 13:00:00
#8 12 апреля 2018 в 20:39
Jestik,
Выполните этот ваш запрос
  1. SELECT COUNT( i.id ) as count
  2. FROM que_con_poster i
  3. FORCE INDEX FOR ORDER BY (dataset_week)
  4. WHERE (i.dateof >= DATE_SUB(NOW(), INTERVAL 7 DAY)) AND (i.is_parent_hidden IS NULL) AND (i.is_approved = '1') AND (i.is_deleted IS NULL) AND (i.is_pub = '1')
в phpmyadmin и посмотрите, будут ли там записи, которые там быть не должны и каким образом они туда попали.
#9 12 апреля 2018 в 21:16
count
5

5 — количество всех записей.


Вообще не пойму, какие настройки есть у этого поля для фильтра. или в каком видео туда значения вводить?
#10 12 апреля 2018 в 22:59
Jestik,
А есть там кроме счетчика запрос sql, где FORCE INDEX FOR ORDER BY (dataset_week) фигурирует?
#11 12 апреля 2018 в 23:18
SELECT COUNT( i.id ) as count
FROM que_con_poster i
FORCE INDEX FOR ORDER BY (dataset_week)
WHERE (i.dateof >= DATE_SUB(NOW(), INTERVAL 7 DAY)) AND (i.is_parent_hidden IS NULL) AND (i.is_approved = '1') AND (i.is_deleted IS NULL) AND (i.is_pub = '1')


SELECT i.*, u.nickname as user_nickname, f.title as folder_title
FROM que_con_poster i
FORCE INDEX FOR ORDER BY (dataset_week)
INNER JOIN que_users as u FORCE INDEX (PRIMARY) ON u.id = i.user_id
LEFT JOIN que_content_folders as f ON f.id = i.folder_id
WHERE (i.dateof >= DATE_SUB(NOW(), INTERVAL 7 DAY)) AND (i.is_parent_hidden IS NULL) AND (i.is_approved = '1') AND (i.is_deleted IS NULL) AND (i.is_pub = '1')
ORDER BY i.date_pub desc
LIMIT 0, 15


Вот это вот… может я все таки что то не так в настройках делаю..)
#12 12 апреля 2018 в 23:32

Вот это вот… может я все таки что то не так в настройках делаю..)

Jestik
Да что там можно не так сделать, когда вот это вот должно отсекать все старше недели
  1. WHERE (i.dateof >= DATE_SUB(NOW(), INTERVAL 7 DAY))
Вы теперь попробуйте вот это в пыхапеадмине выполнить:
  1. SELECT i.*, u.nickname AS user_nickname, f.title AS folder_title
  2. FROM que_con_poster i
  3. FORCE INDEX FOR ORDER BY (dataset_week)
  4. INNER JOIN que_users AS u FORCE INDEX (PRIMARY) ON u.id = i.user_id
  5. LEFT JOIN que_content_folders AS f ON f.id = i.folder_id
  6. WHERE (i.dateof >= DATE_SUB(NOW(), INTERVAL 7 DAY)) AND (i.is_parent_hidden IS NULL) AND (i.is_approved = '1') AND (i.is_deleted IS NULL) AND (i.is_pub = '1')
  7. ORDER BY i.date_pub DESC
  8. LIMIT 0, 15
и посмотрите, будет ли там запись за седьмое июня.
#13 13 апреля 2018 в 17:46
Ris, Да так же выводит все записи.

запись за седьмое июня.

Ris

Я ж думаю Вы правильно меня поняли. что я выполняю сортировку не по полю дата создания, а по другому (созданному). время проведения так сказать. Может это поле не может так сортировать?
#14 13 апреля 2018 в 19:15

Может это поле не может так сортировать?

Jestik
Но в запросе ясно видно, что он должен выводить.
  1. WHERE (i.dateof >= DATE_SUB(NOW(), INTERVAL 7 DAY))
То есть строки, где dateof младше 2018-04-06 19:12:40, а те что старше — в выборку не попадают.
Еще раз прошу выполнить команду
  1. SELECT i.*, u.nickname AS user_nickname, f.title AS folder_title
  2. FROM que_con_poster i
  3. FORCE INDEX FOR ORDER BY (dataset_week)
  4. INNER JOIN que_users AS u FORCE INDEX (PRIMARY) ON u.id = i.user_id
  5. LEFT JOIN que_content_folders AS f ON f.id = i.folder_id
  6. WHERE (i.dateof >= DATE_SUB(NOW(), INTERVAL 7 DAY)) AND (i.is_parent_hidden IS NULL) AND (i.is_approved = '1') AND (i.is_deleted IS NULL) AND (i.is_pub = '1')
  7. ORDER BY i.date_pub DESC
  8. LIMIT 0, 15
в phpmyadmin
И посмотрите, что содержится в dateof в результатах запроса.
#15 13 апреля 2018 в 19:22


2018-06-07 тоже есть…
Вы не можете отвечать в этой теме.
Войдите или зарегистрируйтесь, чтобы писать на форуме.
Используя этот сайт, вы соглашаетесь с тем, что мы используем файлы cookie.