Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [MySQL][PHP]wyświetlanie wyników z bazy datami
Forum PHP.pl > Forum > Przedszkole
tofik1778983
Witam.
Pisze sobie skrypt terminarza a w nim mam zapytanie:
Kod
mysql_query("SELECT id FROM terminarz WHERE data > NOW() AND widoczny='priv' AND owner='".$_SESSION['user']."'") or die('Błąd zapytania');

które wybiera mi ładnie te wyniki z bazy które będą najbliżej od dzisiejszej daty.
Kolumna w tabeli "data" jest typu DATE jak coś.
Chciałem dodać opcje powtarzania w terminarzu dat typu urodziny, imieniny itd.. więc dodałem kolumnę "rep_event" (o wartościach "Y" gdy zaznaczona w formularzu, "N" gdy nie)
Wiec chciałbym zmodyfikować zapytanie (choć nie wiem czy da się samym zapytaniem) tak aby wybierało mi rekordy które mają datę najbliższą od dzisiejszej, z tym że pole typu DATE zapisuje mi date w formacie rrrr-mm-dd.
Teraz jeśli dajmy na to jakieś zdarzenie miało już miejsce (dodam czyjeś urodziny np z 1980 roku) to niestety nie wyświetli mi go . Gdy skrypt porówna dzisiejszą datę z wpisaną datą zdarzenia zobaczy że to już było..
Po tym dochodzimy do wniosku że wypadało by porównać ze sobą tylko miesiąc i dzień zdarzenia z dzisiejszą datą (dzień, miesiąc)
1. Jak to zrobić w moim zapytaniu questionmark.gif
2. Jeśli zapytanie będzie już dobrze wybierać rekordy gdy dodam wtedy do zapytania WHERE rep_vent='Y' AND ... będzie mi poprawie wybierać rekordy w sposób który chcę questionmark.gif

Dla jasności (bo trochę namotałem) chcę wyciągnąć rekordy z datami które jeszcze nie miały miejsca oraz te które się już zdarzyły ale mają zaznaczona opcję powtarzania się co rok.
erix
  1. WHERE month(date)=miesiac AND day(date)=dzien

?
Valdi_B
Kwerenda z warunkiem:
  1. WHERE month(date)=miesiac AND day(date)=dzien
sięgnie tylko rekordy z danego dnia / miesiąca, ale z różnych lat.

Tobie chodzi jednak o rekordy z dat najbliższych dzisiejszej (również przyszłych).
Zmiana kryterium na:
  1. WHERE month(date)>=miesiac ...
też nie załatwia sprawy, bo np. pod koniec roku nie będziesz widział dat ze stycznia.

Może spróbuj inaczej:
1. Tak wyciągasz rekordy z datą dzisiejszą i z przyszłości (zakładam, że w tabeli możesz mieć także daty przyszłe):
  1. SELECT DATA, <inne kolumny>
  2. FROM <tabele> WHERE DATA >= CURDATE() <ew. inne kryteria>;
2. Tak wyciągasz rekordy z dat przeszłych, przerabiając nr roku na przyszły rok:
  1. SELECT CONCAT(YEAR(NOW())+1, DATE_FORMAT(DATA,'-%m-%d')), <inne kolumny>
  2. FROM <tabele> WHERE DATA < CURDATE() <ew. inne kryteria>;
3. Wypróbuj te kwerendy oddzielnie, ew. coś popraw (pisałem z ręki bez sprawdzenia czy / jak to chodzi).

4. Docelowa redakcja kwerendy:
  1. <kwerenda 1>
  2. UNION
  3. <kwerenda 2>
Być może we frazie WHERE trzeba ustawić jakieś "odcięcie", abyś dostawał rekordy z datami np. do 2 mies. w przód, czy coś w tym rodzaju.
tofik1778983
Dziękuje za poradę, sprawdzę niestety dopiero we wtorek jak wrócę do domu.
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.