casperii
19.01.2017, 00:15:56
Panowie próbuje pobrać rekordy w sposób:
... WHERE
(date between
(date('Y-m-d') - INTERVAL 4 DAYS
) AND
date('Y-m-d')) AND
(time between
(date('G:i:s') - INTERVAL 1 MINUTE
) AND
date('G:i:s' + INTERVAL
1 MINUTE
))
Zamierzony cel, wyświetl wyniki z zakresu 4 dni wstecz do teraz i z godziny minute przed i po zgodnie z aktualnym czasem.
Teraz wygląda to tak, że pokazuje mi 18-go wszystkie, ale 17go- pokazuje tylko 1 rekord.
Co jest tu źle ?
trueblue
19.01.2017, 09:00:17
date('Y-m-d') lub date('G:i:s') to jest użycie funkcji MySQL? Nie ma takiej funkcji, jest DATE_FORMAT, ale jeśli chcesz wyłuskać samą datę to wystarczy DATE(), sam czas TIME().
time to pole tabeli?
casperii
19.01.2017, 20:43:39
date , time to pola w bazie.
(time between
(DATE_FORMAT
(TIME, '10:50:00')) AND DATE_FORMAT
(TIME, '21:01:00'))
powyższe działa, jak do tego wpiąć INTERVAL 5 MINUTE ? bo nijak mi nie wychodzi:
(time between
(DATE_FORMAT
(TIME, '%H:%i:%s') - INTERVAL 5 MINUTE
) AND DATE_FORMAT
(TIME, '%H:%i:%s'))
trueblue
19.01.2017, 20:50:52
Nie ma to większego sensu.
Jakiego typu są te dwa pola (date, time)?
Nie możesz przechowywać ich razem w polu typu DATETIME?
casperii
19.01.2017, 21:30:18
Niestety nie może być typu DATETIME ,ponieważ później mam warunki rozbite w zależności od daty i czasu.
Pole date jest typu date, pole time jest typu time
Dlaczego twoim zdaniem to nie ma sensu ?
trueblue
19.01.2017, 21:45:20
Dlatego, że w pierwszym przykładzie do DATE_FORMAT powinien być przekazany format czasu.
W drugim przypadku to robisz, ale po co, skoro pole czas przechowuje właśnie czas.
Czy na pewno chcesz każdy dzień z zakresu ograniczyć od wybranego zakresu czasu, czy tylko pierwszy i ostatni dzień?
Pokaż przykładową datę i czas.
casperii
19.01.2017, 21:58:05
Zapytanie ma wyglądać tak, że pobiera mi rekordy z zakresu dat 4 dni od dzisiejszej daty do daty wczorajszej z godziny np. z zakresu 1h wcześniej niż obecna godzina do godziny 5 minut temu. Myślę , że zrozumiałeś:
date (date) = 2017-01-15 || time (time) = 20:00:03
date (date) = 2017-01-16 || time (time) = 21:00:03
date (date) = 2017-01-17 || time (time) = 21:02:05
date (date) = 2017-01-17 || time (time) = 22:07:05
date (date) = 2017-01-18 || time (time) = 23:01:03
Czyli o godz. 21:57 w dn 19-01-2017 , powinno mi pokazać rekordy:
date (date) = 2017-01-16 || time (time) = 21:00:03
date (date) = 2017-01-17 || time (time) = 21:02:05
trueblue
19.01.2017, 22:06:29
Sprawdź:
`date`>=DATE_SUB(CURDATE(),INTERVAL 4 DAY) AND `date`<=DATE_SUB(CURDATE(),INTERVAL 1 DAY)
AND
`time`>=TIME(DATE_SUB(NOW(),INTERVAL 1 HOUR) AND `time`<=TIME(DATE_SUB(NOW(),INTERVAL 5 MINUTE))
P.S. Data i czas nie muszą być rozbite na dwie kolumny, aby ich używać w warunkach.
casperii
22.01.2017, 12:54:12
Dla pola date jest ok, ale dla pola time pokazuje mi wszystkie godziny:
AND `
time`
>=TIME(DATE_SUB
(NOW
(),INTERVAL 59 MINUTE
) AND `
time`
<=TIME(DATE_SUB
(NOW
(),INTERVAL
1 MINUTE
)))
A powinno brać tylko z zakresu obecna godzina minus 59 minut do obecna godzina minus 1 minuta.
trueblue
22.01.2017, 13:40:48
Nawiasy.
`time`>=TIME(DATE_SUB(NOW(),INTERVAL 1 HOUR)) AND `time`<=TIME(DATE_SUB(NOW(),INTERVAL 5 MINUTE))
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę
kliknij tutaj.