Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [MySQL][PHP] Jak wyświetlić informacje która ważna jest w odpowiednim czasie.
Forum PHP.pl > Forum > Przedszkole
brzanek
Witam w bazie danych mam tabelę ostrzeżenia z terminem ważności.
Czyli ostrzeżenie ważne
Od 2015-10-23 04:00 do 2015-10-23 15:00

Jak na stronie wyświeltlić to ostrzeżenie ale tylko w momencie ważności ostrzeżenia. Czyli teraz jak mamy 2015-10-22 15:55 to ostrzeżenie nie pojawia się dopiero jak będzie 2015-10-23 04:00 i znika po upływie czasu 2015-10-23 15:00.
nospor
..where wart1 between wart2 and wart3 ?
brzanek
Czyli czy odecna data wraz z godziną jest w przedziale ost_startdzien ost_startgodzina do ost_enddzien ost_endgodzina?
Ale jak stworzyć takie zapytanie?

Zrobiłem tak
  1. SELECT * FROM tabela_ostrzezenia WHERE date('Y-m-d') BETWEEN ost_startdzien AND ost_enddzien ORDER BY ost_id DESC LIMIT 1

Ale nie działa.
trueblue
WHERE CURDATE()
Docelowo NOW(), a w warunkach CONCAT(data,' ',godzina)
nospor
uzywasz phpowego date() w mysql... php a mysql to dwie rozne rzeczy i nie wspoldziela metod
brzanek
No jasne
  1. SELECT * FROM tabela_ostrzezenia WHERE CURDATE() BETWEEN ost_startdzien AND ost_enddzien ORDER BY ost_id DESC LIMIT 1

Dzięki

Oczywiście działa
Ale jak zrobić aby jeszcze w przedziale była godzina?
Teraz jest
  1. SELECT * FROM tabela_ostrzezenia WHERE CURDATE() BETWEEN ost_startdzien AND ost_enddzien ORDER BY ost_id DESC LIMIT 1

czyli od daty do daty. Jak do tego dołożyć jeszcze jednen warunek że od dnia tego i tej godziny do dnia tego i do tejgodziny.
w przedziale ost_startdzien ost_startgodzina do ost_enddzien ost_endgodzina?
trueblue
Wczoraj Ci podałem rozwiązanie.

P.S. Lepiej by było gdybyś datę i godzinę przechowywał w jednym polu.
brzanek
Cytat(trueblue @ 23.10.2015, 16:34:29 ) *
Wczoraj Ci podałem rozwiązanie.

P.S. Lepiej by było gdybyś datę i godzinę przechowywał w jednym polu.

Wiem, że lepiej by było ale już nie chcę zmieniać tego w bazie.
PS. Możesz mi powiedzieć jak to zapisać bo coś mi nie wychodzi.

Zrobiłem tak ale nie działa
  1. SELECT * CONCAT(ost_startdzien, ost_startgodzina or ost_enddzien, ost_endgodzina) FROM tabela_ostrzezenia WHERE CURDATE() NOW() ORDER BY ost_id DESC LIMIT 1
trueblue
Zmieniasz tylko warunek, wszystko przed WHERE zostaje tak jak było. NOW() to data+godzina, zastąpi CURDATE().
brzanek
No więc dałem tak
  1. SELECT * FROM tabela_ostrzezenia WHERE NOW() CONCAT(ost_startdzien, ost_startgodzina or ost_enddzien, ost_endgodzina) ORDER BY ost_id DESC LIMIT 1

Ale nie działa.
trueblue
Skoro wcześniej miałeś BETWEEN, to dlaczego teraz usunąłeś? Nadal przecież masz porównać obecny czas z przedziałem.
brzanek
Tak też nie działa
  1. SELECT * FROM tabela_ostrzezenia WHERE NOW() CONCAT(ost_startdzien, ost_startgodzina or ost_enddzien, ost_endgodzina) BETWEEN ost_startdzien AND ost_enddzien ORDER BY ost_id DESC LIMIT 1
trueblue
  1. SELECT * FROM tabela_ostrzezenia WHERE NOW() BETWEEN CONCAT(ost_startdzien,' ',ost_startgodzina) AND CONCAT(ost_enddzien,' ',ost_endgodzina) ORDER BY ost_id DESC LIMIT 1
brzanek
Coś to nie chce mi zadziałać.
trueblue
A czym się objawia niedziałanie?
brzanek
Tym że przy takim zapytaniu
  1. SELECT * FROM ".DB_OSTRZEZENIA." WHERE NOW() BETWEEN ost_startdzien AND ost_enddzien ORDER BY ost_id DESC LIMIT 1

Działa ale tylko w przedziale daty a nie daty i czasu

A przy tym
  1. SELECT * FROM ".DB_OSTRZEZENIA." WHERE NOW() BETWEEN CONCAT(ost_startdzien,' ',ost_startgodzina) AND CONCAT(ost_enddzien,' ',ost_endgodzina) ORDER BY ost_id DESC LIMIT 1

Nic się nie wyświetla.
trueblue
A jest w bazie rekord, dla którego aktualna godzina zawiera się w przedziale czasowym?
brzanek
AJJJJ masz rację, miałem ustawione od 21:00 dzisiaj.
Dzięki za pomoc, plusik leci w twoją stronę.
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.