Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [MySQL][PHP]Czas UNIXowy z podziałem na dzień i na noc
brzanek
post 13.12.2017, 17:47:55
Post #1





Grupa: Zarejestrowani
Postów: 427
Pomógł: 0
Dołączył: 8.11.2012

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


Witam mam pytanie jak z bazy danych gdzie mam pole zawierające datę i godzinę w systemie UNIXowym 1513180800, 1513184400 itp wyciągnąć rekordy które przypisane są do dnia i do nocy.
Rekordy w bazie aktualizują się co godzinę.
Go to the top of the page
+Quote Post
nospor
post 13.12.2017, 18:09:24
Post #2





Grupa: Moderatorzy
Postów: 36 457
Pomógł: 6296
Dołączył: 27.12.2004




No to wybierasz rekordy, ktore sa miedzy jedna a druga godzina. w czym problem?


--------------------

"Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista
"Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer

Go to the top of the page
+Quote Post
brzanek
post 13.12.2017, 18:12:53
Post #3





Grupa: Zarejestrowani
Postów: 427
Pomógł: 0
Dołączył: 8.11.2012

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


No tak ale w bazie danych mam rekordy na 7 dni co godzinę.
Chciałbym aby np. dzień był od godziny 07:00 do 19:00 i noc od 19:00 do 07:00
Czyli
Dzień 1: 07:00 - 19:00 (07:00, 08:00, 09:00, 10:00, 11:00, 12:00, 13:00, 14:00, 15:00, 16:00, 17:00, 18:00)
Noc 19:00 - 07:00 (19:00, 20:00, 21:00, 22:00, 23:00, 00:00, 01:00, 02:00, 03:00, 04:00, 05:00, 06:00)

Dzień 2: 07:00 - 19:00 (07:00, 08:00, 09:00, 10:00, 11:00, 12:00, 13:00, 14:00, 15:00, 16:00, 17:00, 18:00)
Noc 19:00 - 07:00 (19:00, 20:00, 21:00, 22:00, 23:00, 00:00, 01:00, 02:00, 03:00, 04:00, 05:00, 06:00)

Dzień 3: 07:00 - 19:00 (07:00, 08:00, 09:00, 10:00, 11:00, 12:00, 13:00, 14:00, 15:00, 16:00, 17:00, 18:00)
Noc 19:00 - 07:00 (19:00, 20:00, 21:00, 22:00, 23:00, 00:00, 01:00, 02:00, 03:00, 04:00, 05:00, 06:00)

Dzień 4: 07:00 - 19:00 (07:00, 08:00, 09:00, 10:00, 11:00, 12:00, 13:00, 14:00, 15:00, 16:00, 17:00, 18:00)
Noc 19:00 - 07:00 (19:00, 20:00, 21:00, 22:00, 23:00, 00:00, 01:00, 02:00, 03:00, 04:00, 05:00, 06:00)

Dzień 5: 07:00 - 19:00 (07:00, 08:00, 09:00, 10:00, 11:00, 12:00, 13:00, 14:00, 15:00, 16:00, 17:00, 18:00)
Noc 19:00 - 07:00 (19:00, 20:00, 21:00, 22:00, 23:00, 00:00, 01:00, 02:00, 03:00, 04:00, 05:00, 06:00)

Dzień 6: 07:00 - 19:00 (07:00, 08:00, 09:00, 10:00, 11:00, 12:00, 13:00, 14:00, 15:00, 16:00, 17:00, 18:00)
Noc 19:00 - 07:00 (19:00, 20:00, 21:00, 22:00, 23:00, 00:00, 01:00, 02:00, 03:00, 04:00, 05:00, 06:00)

Dzień 7: 07:00 - 19:00 (07:00, 08:00, 09:00, 10:00, 11:00, 12:00, 13:00, 14:00, 15:00, 16:00, 17:00, 18:00)
Noc 19:00 - 07:00 (19:00, 20:00, 21:00, 22:00, 23:00, 00:00, 01:00, 02:00, 03:00, 04:00, 05:00, 06:00)

Ten post edytował brzanek 13.12.2017, 18:15:50
Go to the top of the page
+Quote Post
nospor
post 13.12.2017, 18:27:12
Post #4





Grupa: Moderatorzy
Postów: 36 457
Pomógł: 6296
Dołączył: 27.12.2004




No i wczym problem? Ustawiasz warunek na godzine od i do i jedziesz


--------------------

"Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista
"Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer

Go to the top of the page
+Quote Post
trueblue
post 13.12.2017, 18:29:15
Post #5





Grupa: Zarejestrowani
Postów: 6 761
Pomógł: 1822
Dołączył: 11.03.2014

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


Tworzysz więc dodatkowe kryterium podziału, czyli dzień.
A dzień uzyskasz z WEEKDAY(data)+1.

Jak zaczniesz myśleć o tym, że Twoje czasy UNIX-owe, to po prostu data+czas, to może Ci się rozjaśni.


--------------------
Go to the top of the page
+Quote Post
brzanek
post 13.12.2017, 18:33:22
Post #6





Grupa: Zarejestrowani
Postów: 427
Pomógł: 0
Dołączył: 8.11.2012

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


No tak tylko jaki to warunek bo przecież czas UNIXowy będzie co godzinę się zmieniał
Dzisiaj godzina 19:00 to 1513188000
Jutro godzina 19:00 to będzie 1513274400
A 24.12.2017 godzina 19:00 to będzie 1514138400
Więc jak powinien wyglądać ten warunek od 07:00 do 19:00?
Go to the top of the page
+Quote Post
trueblue
post 13.12.2017, 18:42:23
Post #7





Grupa: Zarejestrowani
Postów: 6 761
Pomógł: 1822
Dołączył: 11.03.2014

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


Od 07:00 do 19:00 jakiego dnia? Obojętnie jakiego?


--------------------
Go to the top of the page
+Quote Post
brzanek
post 13.12.2017, 18:46:28
Post #8





Grupa: Zarejestrowani
Postów: 427
Pomógł: 0
Dołączył: 8.11.2012

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


Generalnie to obojętnie jakiego bo potrzebował będę wyciągnąć dane z dzisiaj, jutro, pojutrze itd.
Go to the top of the page
+Quote Post
trueblue
post 13.12.2017, 18:48:31
Post #9





Grupa: Zarejestrowani
Postów: 6 761
Pomógł: 1822
Dołączył: 11.03.2014

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


No, to już Ci nospor napisał - wybierasz rekordy z danego zakresu godzinowego.
Zamień czas unixowy na datę, a z daty wyciągnij czas.


--------------------
Go to the top of the page
+Quote Post
brzanek
post 13.12.2017, 20:13:48
Post #10





Grupa: Zarejestrowani
Postów: 427
Pomógł: 0
Dołączył: 8.11.2012

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


ok mam już w bazie samą godzinę w formacie np: 18:00 ; 19:00 itd.
Jak teraz powinno wyglądać zapytanie do BD które będzie zawierało przedział od 19:00 do 07:00 i kolejne od 07:00 do 19:00
Go to the top of the page
+Quote Post
trueblue
post 13.12.2017, 20:24:10
Post #11





Grupa: Zarejestrowani
Postów: 6 761
Pomógł: 1822
Dołączył: 11.03.2014

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


W bazie masz samą godzinę? A po co?

Zaglądasz czasem do dokumentacji?
https://dev.mysql.com/doc/refman/5.5/en/dat...n_from-unixtime
https://dev.mysql.com/doc/refman/5.5/en/dat...l#function_time


--------------------
Go to the top of the page
+Quote Post
brzanek
post 14.12.2017, 08:06:14
Post #12





Grupa: Zarejestrowani
Postów: 427
Pomógł: 0
Dołączył: 8.11.2012

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


Jak już mam w bazie godzinę w formacie hh:mm to już niech tak zostanie.
Teraz zrobiłem takie zapytanie
  1. <?
  2. include('db.php');
  3.  
  4. $start = "07:00";
  5. $koniec = "19:00";
  6.  
  7. $result = $mysqli->query("SELECT * FROM prognoza_godzinowa WHERE hgodzina BETWEEN ".$start." AND ".$koniec." ");
  8. while ( $row = mysqli_fetch_array($result) ) {
  9. echo '<div>'.$row['hgodzina'].'</div><br>';
  10. }
  11. ?>

Ale nic się nie wyświetla.

Ok już mam
  1. <?
  2. include('db.php');
  3.  
  4. $start = "07:00";
  5. $koniec = "19:00";
  6.  
  7. $result = $mysqli->query("SELECT * FROM prognoza_godzinowa WHERE hgodzina BETWEEN ".$start." AND ".$koniec." ");
  8. while ( $row = mysqli_fetch_array($result) ) {
  9. echo '<div>'.$row['hgodzina'].'</div><br>';
  10. }
  11. ?>

Teraz tylko jak zrobić aby rekordy nie powtarzały się i aby można było wyciągnąć dane z jutrzejszego dnia również z tych samych godzin.

Ten post edytował brzanek 14.12.2017, 08:21:50
Go to the top of the page
+Quote Post
trueblue
post 14.12.2017, 08:28:53
Post #13





Grupa: Zarejestrowani
Postów: 6 761
Pomógł: 1822
Dołączył: 11.03.2014

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


Nie wiem jak uzyskujesz prawidłowy wynik, skoro godziny to stringi.

Jeśli mają się nie powtarzać, to musisz je jakoś pogrupować. Według czego chcesz grupować?


--------------------
Go to the top of the page
+Quote Post
brzanek
post 14.12.2017, 08:50:24
Post #14





Grupa: Zarejestrowani
Postów: 427
Pomógł: 0
Dołączył: 8.11.2012

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


Zrobiłem tak
  1. <?
  2. include('db.php');
  3.  
  4. $start = "07:00";
  5. $koniec = "19:00";
  6.  
  7. $result = $mysqli->query("SELECT DISTINCT hgodzina, hwindGust FROM prognoza_godzinowa GROUP BY hgodzina WHERE hgodzina BETWEEN '".$start."' AND '".$koniec."' ");
  8. while ( $row = mysqli_fetch_array($result) ) {
  9. echo '<div>'.$row['hgodzina'].' : '.$row['hwindGust'].'</div><br>';
  10. }
  11. ?>

Ale nic się nie wyświetla
Go to the top of the page
+Quote Post
aras785
post 14.12.2017, 09:21:51
Post #15





Grupa: Zarejestrowani
Postów: 859
Pomógł: 177
Dołączył: 29.10.2009

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


W zmiennej $start oraz $koniec musi być czas unixowy...

dzisiaj:

  1. $start = strtotime("today 7:00");
  2. $koniec = strtotime("today 19:00");


wczoraj:
  1. $start = strtotime("yesterday 7:00");
  2. $koniec = strtotime("yesterday 19:00");


jutro:

  1. $start = strtotime("tomorrow 7:00");
  2. $koniec = strtotime("tomorrow 19:00");


za 5 dni

  1. $start = strtotime("+5 days 7:00");
  2. $koniec = strtotime("+5 days 19:00");


Ten post edytował aras785 14.12.2017, 09:24:54
Go to the top of the page
+Quote Post
trueblue
post 14.12.2017, 09:54:37
Post #16





Grupa: Zarejestrowani
Postów: 6 761
Pomógł: 1822
Dołączył: 11.03.2014

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


Najpierw WHERE potem GROUP BY.


--------------------
Go to the top of the page
+Quote Post
brzanek
post 14.12.2017, 13:13:13
Post #17





Grupa: Zarejestrowani
Postów: 427
Pomógł: 0
Dołączył: 8.11.2012

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


Wielkie dzięki - pomogło
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 Wersja Lo-Fi Aktualny czas: 27.04.2024 - 04:48