Einträge tagesabhängig abfragen

Sebigf

Erfahrenes Mitglied
Hallo zusammen !

Ich habe ein Newsscript gecodet...
Nun würde ich es gerne nach Tagen sortiert ausgeben.

Beispiel:

[ Heute XX.XX.XXX ]
News1
News2
News3

[ Gestern XX.XX.XXX ]
News1
News2
News3

[ 2 Tage XX.XX.XXX ]
News1
News2
News3

Die Tabelle ist so aufgebaut:

- id
- headline
- content
- added (timestamp)


Wichtig ist mir dabei, dass nur Einträge ausgelesen werden, wenn diese zum Tag passen. Also wenn z.b. 1 Woche kein neuer Eintrag kam, sollen die Einträge ab dem letzten Eintrag eingezeigt werden, sodass nach 4 Tagen die Newsseite leer wird.

Ich hatte es bereits einmal gecodet, allerdings schon sehr lange her und auch sehr lastig... vor allem, wenn die News 10 < Tage zurücklegen...

Mir geht es eigentlich nur um die SELECT-Strategie, welche ich anwenden muss, da es bei mir immer sehr lastig war bisher :)

Danke
 
Sebigf hat gesagt.:
Also wenn z.b. 1 Woche kein neuer Eintrag kam, sollen die Einträge ab dem letzten Eintrag eingezeigt werden, sodass nach 4 Tagen die Newsseite leer wird.

Mmmh..das birgt irgendwie einen Widerspruch in sich....was denn nun, wenn nach 4 Tagen nicht neues da ist, die letzten Beiträge anzeigen, oder garnichts :confused:

Ansonsten: MySQL bietet umfangreiche Datumsfunktionen...bspw. DAYOFYEAR() verbunden YEAR() sollte dich schnell weiterbringen.
 
Hehe, habe ein "nicht" vergessen ;) Danke für den Hinweis...

"Also wenn z.b. 1 Woche kein neuer Eintrag kam, sollen die Einträge ab dem letzten Eintrag angezeigt werden, sodass nach 4 Tagen die Newsseite nicht leer wird."

Vielleicht sollte ich das ganze einfacher formulieren...

Wenn keine neuen News hinzukamen, soll die Auslesung der Daten einfach "stoppen". Ich hoffe so ist es einfacher zu verstehen.
 
Naja...mach zuerst ein SELECT, wo du alle Beiträge holst, die in den letzten 4 Tagen erstellt wurden.
Wenn es da kein Ergebnis gibt, holst du halt die X neuesten Beiträge mit einem weiteren SELECT.

Oder du machst alles in einem Rutsch...holst alles nach Datum abwärts sortiert aus der DB.

Wenn du was dabei hast, was in den letzen 4 Tagen erstellt wurde, setzt du eine Flag und gibst es aus.

Ist die Flag nicht gesetzt, gibst du halt die X ersten Beiträge aus.
 
Danke für den Denkansatz.

Flag ?

Was ich mich frage, wie muss ich bei den Tagen vorgehen...
Soll ich die Tage einfach durch eine while() oder for() laufen lassen und dann entsprechend die SQL-Querys starten mit dem Wert, der durch die Schleife erzeugt wird.
 
Nö...nicht für jeden Tag ein einzelnes SELECT.

Wieviel Tage etwas her ist, sagt dir schon MySQL, wenn du es fragst :)

Code:
SELECT TO_DAYS(NOW()) - TO_DAYS(datumsspalte) AS tagedifferenz
FROM tabelle

Mit Flag meine ich bspw. eine Variable, die du auf false setzt, sobald du etwas findest, was nicht älter als 4 Tage ist(bei der Auswertung des Ergebnisses mit PHP)

Du schaust dann halt nach, ob diese Flag FALSE ist, wenn du bei den älteren Beiträgen ankommst...wenn ja, dann beendest du die Auswertung, wenn nicht, gibst du ein paar alte Beiträg aus.
 
Mmh, interessante Query ;) Eigentlich könnte ich doch auch die Einträge Gruppieren mit den jeweiligen Tagessätzen, oder?

Mein Ziel ist es wie gesagt, nur ab dem Datum des letzten Eintrages alle Datensätze nach hinten durchzuarbeiten. Also wenn der letzte Post von heute gesehen am Donnerstag war, sollen Dienstag, Mittwoch und Donnerstag angezeigt werden... Sonst nichts.
 
Ja das sollte möglich sein. Probier mal folgende Abfrage:
Code:
SELECT
        …
  FROM
        `tabelle`
  ORDER BY
        `datum` DESC
  WHERE
        TO_DAYS(MAX(`datum`)) - TO_DAYS(`datum`) < 3
 
Das zeigt aber nicht die Beiträge der letzen 3 Tage, sondern die der letzten 3 Tage seit dem letzten Eintrag.
Wurde bspw. das letzte mal Ostermontag etwas eingetragen, dann sind da noch Beiträge von Karfreitag bei... nicht grad neu, oder :)
 

Neue Beiträge

Zurück