Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   bestimmte Termine aus Datenbank abfragen (https://www.delphipraxis.net/55323-bestimmte-termine-aus-datenbank-abfragen.html)

zappel 19. Okt 2005 16:14

Datenbank: MySQL • Zugriff über: PHP

bestimmte Termine aus Datenbank abfragen
 
Hallo!

Ich habe eine Tabelle in einer MySQL-Datenbank, in der Termine gespeichert sind. Neben dem Datum im date-Format ist eine Beschreibung und der Typ der Termins als int gespeichert. Typ 0 ist ein normaler Termin, 1 ein Geburtstag usw.

Ich möchte nun aus meiner Datenbank die 5 nächsten Termine in der Zukunft abfragen. Eigentlich ganz simpel mit "... WHERE datum >= heute LIMIT 5". Bei Terminen vom Typ Geburtstag spielt das Jahr allerdings keine Rolle, da der Geburtstag jedes Jahr wieder auftritt. Und deshalb weiß ich auch nicht genau, wie ich die Abfrage gestalten soll?

robroy85 19. Okt 2005 17:03

Re: komplizierte Datenbankabfrage
 
Guck mal hier
DATE_FORMAT

Mit der Funktion DATE_FORMAT kannst du Monat und Tag auslesen


also zB so ...WHERE DATE_FORMAT( geb_DATE, '%d%m') <= DATE_FORMAT( HEUTE, '%d%m') LIMIT 5

kann das leider hier nicht testen, da ich kein MYSQL habe

Sharky 19. Okt 2005 17:06

Re: komplizierte Datenbankabfrage
 
Hai zappel,

ändere doch bitte den Titel deiner Frage. Unter "komplizierte Datenbankabfrage" kann man sich in der Übersicht nicht viel vorstellen.

zappel 19. Okt 2005 17:17

Re: bestimmte Termine aus Datenbank abfragen
 
Naja, der Titel ist auch nicht viel besser. Meine Frage kann man nicht gut betitlen. Der alte Titel hat wenigstens aufmerksam gemacht, oder? :wink:

Wie ich mit DATE_FORMAT und Co arbeite, weiß ich. Es geht mir also nicht um Hilfe für den Code. Ich habe nur absolut keine Ahnung, wie ich den "Algorithmus" zusammenbasteln muss.

shmia 19. Okt 2005 18:07

Re: bestimmte Termine aus Datenbank abfragen
 
folgende SQL-Abfrage liefert max. 5 Termin PLUS einen Geburtstag (falls gespeichert).
Die Parameter :Datum1 und :Datum2 werden auf SysUtils.Date gesetzt.
:Datum3 wird auf SysUtils.Date + 365.0 gesetzt.
Im Ergebnis können 6 Termine genannt werden, aber das ist wohl Pups-Egal.
SQL-Code:
SELECT TOP 5 * FROM Termine
WHERE Typ<>1 AND datum >= :Datum1
UNION ALL
SELECT * FROM Termine
WHERE Typ=1 AND datum >= :Datum2 AND datum < :Datum3

Jelly 19. Okt 2005 21:10

Re: bestimmte Termine aus Datenbank abfragen
 
Warum so kompliziert über UNION ?

SQL-Code:
select *, DATE_FORMAT (Datum,'%m%d') as MonatTag from Termine
where (Typ=0 and DATE_FORMAT(Datum,'%m%d') >= DATE_FORMAT(CURRENT_DATE,'%m%d')) or
      (Typ=1 and Datum >= CURRENT_DATE)
order by DATE_FORMAT (Datum,'%m%d')
limit 0,5
So in etwa, aber ungetestet, würde ichs probieren.

Schlägt aber fehl ab dem 27.12.... Denn 5 später ist der 01.01., und mit der DATE_FORMAT Funktion ist 0101 < 1217... Aber dennoch denk ich ist der Ansatz nicht zu schlecht

zappel 20. Okt 2005 17:39

Re: bestimmte Termine aus Datenbank abfragen
 
@Jelly: Ich habe die Abfrage auch schon so ähnlich wie du in deinem Vorschlag gehabt. Bis dahin ist das ja auch recht einfach. Das Problem sind halt die Termine vom Typ Geburtstag aus dem kommenden Jahr.


Alle Zeitangaben in WEZ +1. Es ist jetzt 21:11 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz