Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [MySQL][PHP]wyświetlanie wyników z bazy datami, troche nietypowo
tofik1778983
post
Post #1





Grupa: Zarejestrowani
Postów: 144
Pomógł: 1
Dołączył: 22.11.2007
Skąd: lbn

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


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 (IMG:style_emoticons/default/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ę (IMG:style_emoticons/default/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.

Ten post edytował tofik1778983 4.03.2011, 04:01:10
Go to the top of the page
+Quote Post
erix
post
Post #2





Grupa: Moderatorzy
Postów: 15 467
Pomógł: 1451
Dołączył: 25.04.2005
Skąd: Szczebrzeszyn/Rzeszów




  1. WHERE month(date)=miesiac AND day(date)=dzien

?
Go to the top of the page
+Quote Post
Valdi_B
post
Post #3





Grupa: Zarejestrowani
Postów: 107
Pomógł: 30
Dołączył: 19.02.2011
Skąd: Warszawa

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


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.

Ten post edytował Valdi_B 4.03.2011, 15:46:31
Go to the top of the page
+Quote Post
tofik1778983
post
Post #4





Grupa: Zarejestrowani
Postów: 144
Pomógł: 1
Dołączył: 22.11.2007
Skąd: lbn

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


Dziękuje za poradę, sprawdzę niestety dopiero we wtorek jak wrócę do domu.
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
2 Użytkowników czyta ten temat (2 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 23.08.2025 - 18:51