Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [MySQL][PHP] Wywołanie rekordów odpowiadające dacie
brzanek
post 18.07.2017, 07:57:08
Post #1





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

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


Witam mam w bazie wydarzenia, które pojawią się za np. 2 dni.
Na stronie w php mam takie wywoływanie
  1. $result = dbquery(
  2. "SELECT * FROM ".DB_OSTRZEZENIA." WHERE NOW() BETWEEN CONCAT(ost_startdzien) AND CONCAT(ost_enddzien,' ',ost_endgodzina) ORDER BY ost_id DESC LIMIT 3"
  3. );


Oczywiście zwraca mi to rekordy jaki ma się pojawić tego dnia. Ale jak zrobić aby wywołać rekordy kolejne (przybliżone) te co mają pojawić się np. za 2 dni. Dodam tylko, że nie w każdym dni jest jakieś wydarzenie.

Chciał bym taki efekt.
W bazie mam:
18.07.2017 - wydarzenie 1
20.07.2017 - wydarzenie 2

Na stronie chcę wyświetlić to w takiej formie
18.07.2017 - wydarzenie 1
19.07.2017 - brak wydarzeń
20.07.2017 - wydarzenie 2
Go to the top of the page
+Quote Post
Pyton_000
post 18.07.2017, 08:37:50
Post #2





Grupa: Zarejestrowani
Postów: 8 068
Pomógł: 1414
Dołączył: 26.10.2005

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


To już w PHP zrób sobie spis dat od do i przy wyświetlaniu leć po tych datach, jak będą jakieś dane z BD to wyświetl a jak nie to pustą datę.

http://php.net/manual/en/class.dateperiod.php#109846
Go to the top of the page
+Quote Post
brzanek
post 18.07.2017, 08:50:40
Post #3





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

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


Spis dat? Ale jak to zrobić?
  1. $begin = new DateTime( '2012-08-01' );
  2. $end = new DateTime( '2012-08-31' );
  3. $end = $end->modify( '+1 day' );
Go to the top of the page
+Quote Post
trueblue
post 18.07.2017, 08:56:34
Post #4





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

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


Zrób sobie LEFT JOIN z taką tabelą:
  1. SELECT CURDATE() + INTERVAL (daty.dzien) DAY AS DATA FROM (SELECT 0 AS dzien UNION ALL SELECT 1 UNION ALL SELECT 2 UNION ALL SELECT 3) AS daty
tu jest przykład do 3-ech dni w przód, możesz go rozszerzyć lub zawęzić.

Ten post edytował trueblue 18.07.2017, 09:09:00


--------------------
Go to the top of the page
+Quote Post
Pyton_000
post 18.07.2017, 08:56:36
Post #5





Grupa: Zarejestrowani
Postów: 8 068
Pomógł: 1414
Dołączył: 26.10.2005

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


Rozumiem że to głupi żart? Przecież dostałeś link z DOKŁADNYM przykładem, a ty wklejasz kawałek kodu i pytasz się jak zrobić?
Go to the top of the page
+Quote Post
brzanek
post 18.07.2017, 11:01:49
Post #6





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

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


Już sobie poradziłem wystarczyło tylko tak skonstruować zapytanie
  1. $result = dbquery(
  2. "SELECT * FROM ".DB_OSTRZEZENIA." WHERE CURDATE() + INTERVAL 3 DAY BETWEEN CONCAT(ost_startdzien) AND CONCAT(ost_startdzien) ORDER BY ost_id DESC LIMIT 1"
  3. );


Oczywiście to jest tylko dla wyniku 3dni później.

Ten post edytował brzanek 18.07.2017, 11:02:50
Go to the top of the page
+Quote Post
trueblue
post 18.07.2017, 11:08:27
Post #7





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

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


I teraz zapytanie pokazuje daty, w których nie było ostrzeżeń?


--------------------
Go to the top of the page
+Quote Post
brzanek
post 18.07.2017, 11:10:36
Post #8





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

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


Oczywiście, że nie ale dodałem warunek i działa tak jak chciałem
  1. $result = dbquery(
  2. "SELECT * FROM ".DB_OSTRZEZENIA." WHERE CURDATE() + INTERVAL 3 DAY BETWEEN CONCAT(ost_startdzien) AND CONCAT(ost_startdzien) ORDER BY ost_id DESC LIMIT 1"
  3. );
  4. if (dbrows($result)) {
  5. while($data = dbarray($result)) {
  6.  
  7. //$parameter= $settings['siteurl']."ostrzezenie.php?ost_id=".$data['ost_id'];
  8.  
  9. echo '<div class="row">
  10. <div class="col-md-12">';
  11. echo "<img src='".INFUSIONS."ostrzezenia_infusion/images/".$data['ost_image']."' class='img-responsive' alt=''>";
  12. echo '</div>
  13. </div>';
  14. }
  15. }
  16. else // Warunek niespełniony
  17. {
  18. echo '<div class="row">
  19. <div class="col-md-12">';
  20. echo "<img src='http://pogoda-zachodniopomorskie.pl/infusions/ostrzezenia_infusion/images/brak.png' class='img-responsive' alt=''>";
  21. echo '</div>
  22. </div>';
  23. }
Go to the top of the page
+Quote Post
trueblue
post 18.07.2017, 11:16:36
Post #9





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

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


Ale Ty wybierasz tylko jeden dzień, a nie kilka. Robisz 3 odrębne zapytania na kilka dni?

Swoją drogą jeśli wybierasz jeden dzień, to while nie jest potrzebny.


--------------------
Go to the top of the page
+Quote Post
brzanek
post 18.07.2017, 11:48:28
Post #10





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

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


Potrzebuję 3 dni więc tak robię 3 zapytania ale inaczej nie mogę tego zrobić.
Go to the top of the page
+Quote Post
trueblue
post 18.07.2017, 12:03:15
Post #11





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

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


A dlaczego nie możesz inaczej?


--------------------
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: 7.07.2025 - 16:25