Select aus einer Datenbank

Liebe Wissenden,
ich bin grad dabei einen teil einer hp mit veranstaltungshinweisen mittels php zu schreiben…

die termine sind alle in mySQl in einem database gespeichert…

jetzt würde ich gerne das ganze so schreiben, dass er die datenbank durchsucht und vom aktuellen datum aus den am nächsten in der zukunft liegenden datensatz (bei welchem es eine spalte mit „datum“ gibt) auswählt. das selbe mit dem 2 nächsten und so weiter

wie kann ich das in der
$query=„SELECT * FROM termine order by date desc limit 3“;
zeile richtig schreiben - so wie es hier geschrieben ist nimmt er ja den 3. jünsten und das will ich ja nicht - es sind ja noch 20 davor die aktuell sind…

hoffe das meine ausführungen zu meinem problem verständlich sind und mir irgendwer weiterhelfen kann
vielen herzlichen dank
caipi

Moin,

Liebe Wissenden,

gleich wirst du auch dazugehören…:wink:)

ich bin grad dabei einen teil einer hp mit
veranstaltungshinweisen mittels php zu schreiben…

die termine sind alle in mySQl in einem database
gespeichert…

jetzt würde ich gerne das ganze so schreiben, dass er die
datenbank durchsucht und vom aktuellen datum aus den am
nächsten in der zukunft liegenden datensatz (bei welchem es
eine spalte mit „datum“ gibt) auswählt. das selbe mit dem 2
nächsten und so weiter

wie kann ich das in der
$query=„SELECT * FROM termine order by date desc limit 3“;
zeile richtig schreiben - so wie es hier geschrieben ist nimmt
er ja den 3. jünsten und das will ich ja nicht - es sind ja
noch 20 davor die aktuell sind…

hoffe das meine ausführungen zu meinem problem verständlich
sind und mir irgendwer weiterhelfen kann

Na klar doch.

$year_today = date („Y“);
$month_today = date („m“);
$day_today = date („d“);
$today = „$year_today-$month_today-$day_today“;

$query="
SELECT *
FROM termine
WHERE date BETWEEN $today AND 2099-12-31
ORDER BY date DESC
LIMIT 3";

Damit taucht dein nächstes Prob am 31.12.2099 auf, aber damit soll sich der nächste Admin rumschlagen :wink:)

vielen herzlichen dank

Bitte.

caipi

widecrypt

also erstmal vielen herzlichen dank bin schon ein stück weiter gekommen
was immer noch nicht gscheid funzt ist das mit dem limit

da steckt doch noch irgendwo der wurm drinnen
die zeile sieht im moment so aus:
$year_today = date („Y“);
$month_today = date („m“);
$day_today = date („d“);
$today = „$year_today-$month_today-$day_today“;

$query=„SELECT * FROM termine WHERE onlinedate BETWEEN $today AND ‚2099-12-30‘ ORDER BY date LIMIT 1“;

hier wirft er mir den richtigen datensatz aus nämlich den am nächsten in der zukunft liegenden

wenn ich jetzt ‚limit 2‘ eingib kommt wieder der selbe datensatz wie bei ‚limit 1‘ und wenn ich ‚limit 1,2‘ eingib kommt der wie gewünschte 2. datensatz

soweit so gut würde mich ja nicht stören
allerdings funktioniert das spielchen mit dem 3. datensatz nimma
da kann ich eingeben was ich will es kommt immer der 1. oder der 2. datensatz (ich habe bisher 5 in der zukunft liegenden datensätze in der datenbank gespeichert

vielleicht gibts ja hierfür auch noch einen kleinen tipp
merci vielmals
c**

Hi caipi,

Das Ganze lässt sich auch ohne PHP-Date Funktion lösen.

$query=„SELECT * FROM termine
WHERE date >= CURDATE()
ORDER BY date ASC LIMIT 3“;

damit hat auch der nächste Admin Ruhe. Das >= zeigt Dir auch Termine von heute. Angenommen wir haben 5 Termine in der Zukunft, alle einen Tag später, beginnend bei heute. Die Query selektiert Dir nun die 3 anstehenden Termine, ohne die 2, die ihnen folgen, sprich den Termin heute, morgen und übermorgen ohne die Termine von übermorgen und von in 3 und 4 Tagen. Mit diesem System setzt Du voraus, dass es nur bis zu 3 Veranstaltungen an einem Tag geben kann. Wenn Du die Zeit miteinbeziehen möchtest (date also vom Typ DATETIME), dann müsstest Du anstatt CURDATE() die Funktion NOW() verwenden.

Schönen Gruß,
Rudy

Hi caipi,

glaubs Rudy, ich hab von ihm gelernt :wink:)

Hi caipi,

Das Ganze lässt sich auch ohne PHP-Date Funktion lösen.

Natürlich, aber die Lastverteilung (Webserver mysql-Server) bleibt auf der Strecke. OK, der Webserver wird eh den Löwenanteil abschuften und aus dem Blickwinkel machts schon Sinn soviel wie möglich ins query zu stopfen.

$query=„SELECT * FROM termine
WHERE date >= CURDATE()
ORDER BY date ASC LIMIT 3“;

damit hat auch der nächste Admin Ruhe. Das >= zeigt Dir
auch Termine von heute. Angenommen wir haben 5 Termine in der
Zukunft, alle einen Tag später, beginnend bei heute. Die Query
selektiert Dir nun die 3 anstehenden Termine, ohne die 2, die
ihnen folgen, sprich den Termin heute, morgen und übermorgen
ohne die Termine von übermorgen und von in 3 und 4 Tagen. Mit
diesem System setzt Du voraus, dass es nur bis zu 3
Veranstaltungen an einem Tag geben kann. Wenn Du die Zeit
miteinbeziehen möchtest (date also vom Typ DATETIME), dann
müsstest Du anstatt CURDATE() die Funktion NOW() verwenden.

Wie immer wie ausm Lehrbuch.

Schönen Gruß,
Rudy

Gruß

widecrypt