Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [MySQL][PHP] Wywołanie rekordów odpowiadające dacie
Forum PHP.pl > Forum > Przedszkole
brzanek
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
Pyton_000
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
brzanek
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' );
trueblue
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ć.
Pyton_000
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ć?
brzanek
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.
trueblue
I teraz zapytanie pokazuje daty, w których nie było ostrzeżeń?
brzanek
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. }
trueblue
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.
brzanek
Potrzebuję 3 dni więc tak robię 3 zapytania ale inaczej nie mogę tego zrobić.
trueblue
A dlaczego nie możesz inaczej?
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.
Invision Power Board © 2001-2025 Invision Power Services, Inc.