Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [MySQL][PHP]BETWEEN DATA i TIME - zapytanie mysql
casperii
post
Post #1





Grupa: Zarejestrowani
Postów: 681
Pomógł: 28
Dołączył: 14.08.2014

Ostrzeżenie: (0%)
-----


Panowie próbuje pobrać rekordy w sposób:

  1. ... 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 ?
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 9)
trueblue
post
Post #2





Grupa: Zarejestrowani
Postów: 6 806
Pomógł: 1828
Dołączył: 11.03.2014

Ostrzeżenie: (0%)
-----


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?


--------------------
Go to the top of the page
+Quote Post
casperii
post
Post #3





Grupa: Zarejestrowani
Postów: 681
Pomógł: 28
Dołączył: 14.08.2014

Ostrzeżenie: (0%)
-----


date , time to pola w bazie.

  1. (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:


  1. (time between (DATE_FORMAT(TIME, '%H:%i:%s') - INTERVAL 5 MINUTE) AND DATE_FORMAT(TIME, '%H:%i:%s'))

Go to the top of the page
+Quote Post
trueblue
post
Post #4





Grupa: Zarejestrowani
Postów: 6 806
Pomógł: 1828
Dołączył: 11.03.2014

Ostrzeżenie: (0%)
-----


Nie ma to większego sensu.

Jakiego typu są te dwa pola (date, time)?
Nie możesz przechowywać ich razem w polu typu DATETIME?


--------------------
Go to the top of the page
+Quote Post
casperii
post
Post #5





Grupa: Zarejestrowani
Postów: 681
Pomógł: 28
Dołączył: 14.08.2014

Ostrzeżenie: (0%)
-----


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 ?

Ten post edytował casperii 19.01.2017, 21:34:55
Go to the top of the page
+Quote Post
trueblue
post
Post #6





Grupa: Zarejestrowani
Postów: 6 806
Pomógł: 1828
Dołączył: 11.03.2014

Ostrzeżenie: (0%)
-----


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.


--------------------
Go to the top of the page
+Quote Post
casperii
post
Post #7





Grupa: Zarejestrowani
Postów: 681
Pomógł: 28
Dołączył: 14.08.2014

Ostrzeżenie: (0%)
-----


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

Ten post edytował casperii 19.01.2017, 22:00:14
Go to the top of the page
+Quote Post
trueblue
post
Post #8





Grupa: Zarejestrowani
Postów: 6 806
Pomógł: 1828
Dołączył: 11.03.2014

Ostrzeżenie: (0%)
-----


Sprawdź:
  1. `date`>=DATE_SUB(CURDATE(),INTERVAL 4 DAY) AND `date`<=DATE_SUB(CURDATE(),INTERVAL 1 DAY)
  2. AND
  3. `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.


--------------------
Go to the top of the page
+Quote Post
casperii
post
Post #9





Grupa: Zarejestrowani
Postów: 681
Pomógł: 28
Dołączył: 14.08.2014

Ostrzeżenie: (0%)
-----


Dla pola date jest ok, ale dla pola time pokazuje mi wszystkie godziny:

  1. 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.
Go to the top of the page
+Quote Post
trueblue
post
Post #10





Grupa: Zarejestrowani
Postów: 6 806
Pomógł: 1828
Dołączył: 11.03.2014

Ostrzeżenie: (0%)
-----


Nawiasy.
  1. `time`>=TIME(DATE_SUB(NOW(),INTERVAL 1 HOUR)) AND `time`<=TIME(DATE_SUB(NOW(),INTERVAL 5 MINUTE))


--------------------
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
1 Użytkowników czyta ten temat (1 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 21.08.2025 - 22:38