Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Вывод дат в промежутке / 13 сообщений из 13, страница 1 из 1
09.09.2018, 18:02
    #39700120
Zaifat
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вывод дат в промежутке
Есть код, выводит события, за указанную дату, но сейчас он работает не корректно, в плане выводит на день позже, может кто помочь корректно написать выборку?

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
	SELECT 
		*
	FROM dle_post 
	WHERE 
		approve='1' AND
        
		(eventdate <= '{$year}-{$month}-{$day}' AND 
		eventdate_end >= '{$year}-{$month}-{$day}' AND 
		eventdate_end != '0000-00-00')
        OR 
		(eventdate >= '{$year}-{$month}-{$day}' AND 
		eventdate < '{$year}-{$month}-{$day}' + INTERVAL 24 HOUR AND 
		(eventdate_end = '0000-00-00'))
...
Рейтинг: 0 / 0
09.09.2018, 18:07
    #39700122
Zaifat
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вывод дат в промежутке
Написал так:


Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
	SELECT 
		*
	FROM dle_post 
	WHERE 
		approve='1' AND
        
		(eventdate < '{$year}-{$month}-{$day}' + INTERVAL 24 HOUR AND 
		eventdate_end > '{$year}-{$month}-{$day}' + INTERVAL 24 HOUR AND 
		eventdate_end != '0000-00-00')
        OR 
		(eventdate >= '{$year}-{$month}-{$day}' AND 
		eventdate < '{$year}-{$month}-{$day}' + INTERVAL 24 HOUR AND 
		(eventdate_end = '0000-00-00'))



но мне кажется это не очень правильно
...
Рейтинг: 0 / 0
09.09.2018, 19:14
    #39700130
Щукина Анна
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вывод дат в промежутке
Zaifat,

если интересует событие за 09 сентября, то рассматриваем всю длину суток - от "2018-09-09 00:00:00" до "2018-09-09 23:59:59" ?

Событие - точка во времени или интервал с началом и кончалом?
Если интервал, то как долдны соотносится "интервал интересуемых суток" и "интервал действия события"?
событие должно полностью попадать в указанную дату? или иметь с ней хотя бы пересечение?
...
Рейтинг: 0 / 0
10.09.2018, 04:27
    #39700200
Щукина Анна
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вывод дат в промежутке
Zaifat,

ну или "в картинках":

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
|---------- |\\\\\\\\\\\\\\\\\\\\\\\\\\\\| ---------- сутки "интереса"
|
|----- |\\\\\\\\| ----------------------------------- Событие № 1
|
|----------------- |\\\\\\\\| ----------------------- Событие № 2
|
|-------------------------------- |\\\\\\\\\| ------- Событие № 3
|
|------ |\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\| ---- Событие № 4


Какое из 4-х событий произошло в промежутке "суток интереса" ? Почему?
...
Рейтинг: 0 / 0
10.09.2018, 11:43
    #39700327
Zaifat
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вывод дат в промежутке
Щукина Анна,

есть интервал дат, начало и конец, но возможно, что будет только дата начала и все, то есть дата конца равна нулям
...
Рейтинг: 0 / 0
10.09.2018, 11:45
    #39700328
Щукина Анна
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вывод дат в промежутке
Zaifat,

по моей картинке - какое из событий попадает в выбранный день?
...
Рейтинг: 0 / 0
10.09.2018, 14:24
    #39700432
Zaifat
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вывод дат в промежутке
Щукина Анна,

все 4, так как они все подпадают под "сутки интереса"
...
Рейтинг: 0 / 0
10.09.2018, 15:54
    #39700487
Akina
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вывод дат в промежутке
Zaifatвсе 4, так как они все подпадают под "сутки интереса"
Событие

'2018-01-01 12:00:00' ... '2018-01-02 00:00:00'

попадает в сутки

'2018-01-02 00:00:00' ... '2018-01-02 23:59:59'

?
...
Рейтинг: 0 / 0
10.09.2018, 18:10
    #39700587
Zaifat
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вывод дат в промежутке
Akina,
неа
...
Рейтинг: 0 / 0
10.09.2018, 19:19
    #39700622
Щукина Анна
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вывод дат в промежутке
Zaifat,

в общем случае, два отрезка (B1,E1) и (B2, E2) считаются пересекающимися, если любая из двух конечных точек (Ei) не меньше обоих начальных точек (Bi).
но, так как конечная точка отрезка изначально больше его же начальной точки, на практике достаточно проверить "перекрестное неравенство" между кончалом каждого отрезка и началом другого
в SQL записывается примерно так:
where E2 >= B1 and E1 >= B2


точку перехода суток "выколете" сами, в соответствии с вашей бизнес-логикой...
...
Рейтинг: 0 / 0
10.09.2018, 19:50
    #39700636
Akina
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вывод дат в промежутке
Щукина Аннаwhere E2 >= B1 and E1 >= B2Касание ему не нра, так что неравенства строгие...
...
Рейтинг: 0 / 0
10.09.2018, 20:00
    #39700642
Щукина Анна
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вывод дат в промежутке
Akina,

потому и написано:
Щукина Аннаточку перехода суток "выколете" сами, в соответствии с вашей бизнес-логикой...
...
Рейтинг: 0 / 0
10.09.2018, 20:02
    #39700643
Щукина Анна
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вывод дат в промежутке
Akina,

тут, думается, от ТС ещё сейчас такая предъява прилетит, что у него задается точка во времени, определяющая "сутки интереса", а не интервал дат. А где у точки начало/кончало - непонятно...
...
Рейтинг: 0 / 0
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Вывод дат в промежутке / 13 сообщений из 13, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]