Zum Inhalt springen

Empfohlene Beiträge

Geschrieben

Hallo, ich habe eine Datenbank mit Messages und frage sie zur Zeit mit folgender Abfrage für einen Empfaenger ab.

SELECT *

FROM `NA_messages`

WHERE empfaenger = 'Netsrac'

ORDER BY datum

Nun bekomme ich eine Liste von 300 Einträgen. Die ältesten unten und die neusten Oben.

Jetzt mein Problem. Ich will immer nur die 200 Ältesten anzeigen. Also quasi von unten ab bis 200.

Hat jemand eine Idee wie ich das umstellen kann? Ich hatte an ein "Limit" gedacht, aber das Hilft mir ja nicht wirklich weiter, da ich ja die ID der letzten Mail nicht weiß..

Klar könnte ich hergehen und ein order by datum ASC machen und das auf 200 begrenzen. Aber dann müßte mein Programm dieses Result noch einmal umgekehrt sortieren... Diese Logik gehört mir eher in die Abfrage als ins Programm...

Ich verwende MySQL 4.0 und PHP als Sprache.

Danke für eure Hilfe.

Geschrieben
Original geschrieben von Net-srac

SELECT *

FROM `NA_messages`

WHERE empfaenger = 'Netsrac'

ORDER BY datum

Nun bekomme ich eine Liste von 300 Einträgen. Die ältesten unten und die neusten Oben.

Jetzt mein Problem. Ich will immer nur die 200 Ältesten anzeigen. Also quasi von unten ab bis 200.

Also ob das bei MySQL auch geht, kann ich dir nicht sagen, aber meine Idee war eine "TopX" abfrage zu machen und diese dann asc zu sortieren...

Geschrieben

Ich kenne MySQL nicht, evtl hilfts dir trotzdem:

Unter ORacle gehts so, wenn ich dein Problem richtig verstehe:

select * from (

select edat from `NA_messages` where empfaenger = 'Netsrac' AND rownum<200 order by datum asc)

order by datum desc;

Geschrieben
Original geschrieben von dgr243

Also ob das bei MySQL auch geht, kann ich dir nicht sagen, aber meine Idee war eine "TopX" abfrage zu machen und diese dann asc zu sortieren...

Das kann ich doch dann aber nicht in einer Query machen oder?

Was genau meinst du mit TopX ?

@Brunswick, soweit ich weiß unterstützt Mysql4 leider noch keine Subselects. Das ist erst ab Version 5 geplant, die aber noch nicht Stable ist.

Also wird diese Query auch nicht gehen. :(

Danke Trotzdem ;)

Geschrieben
Original geschrieben von Net-srac

Das kann ich doch dann aber nicht in einer Query machen oder?

Was genau meinst du mit TopX ?

Der MS SQL Server kennt die Gruppenfunktion "TOPx" (x = int) und zeigt dir die x grössten (oder mit order by x asc halt die kleinsten) Werte an....

Geschrieben
Original geschrieben von Wolle

Ab 4.1 gibts schon Subselects, ist aber auch noch nicht stable: http://www.mysql.com/doc/en/Nutshell_4.1_features.html

LIMIT ist für Mysql das ensprechende.

SELECT * FROM Table WHERE Feld>Wert LIMIT 200

Naja, wie auch immer....

ich hab jetzt in einer for Schleife die Länge des Results um eins verringert und dann mit mysql_data_seek den Zeiger gesetzt...

also lasse ich quasi einfach das Result in umgekehrter Reihenfolge ausgeben. Ob das jetzt so performant ist kann ich leider nicht einschätzen...

Erstelle ein Benutzerkonto oder melde Dich an, um zu kommentieren

Du musst ein Benutzerkonto haben, um einen Kommentar verfassen zu können

Benutzerkonto erstellen

Neues Benutzerkonto für unsere Community erstellen. Es ist einfach!

Neues Benutzerkonto erstellen

Anmelden

Du hast bereits ein Benutzerkonto? Melde Dich hier an.

Jetzt anmelden

Fachinformatiker.de, 2024 by SE Internet Services

fidelogo_small.png

Schicke uns eine Nachricht!

Fachinformatiker.de ist die größte IT-Community
rund um Ausbildung, Job, Weiterbildung für IT-Fachkräfte.

Fachinformatiker.de App

Download on the App Store
Get it on Google Play

Kontakt

Hier werben?
Oder sende eine E-Mail an

Social media u. feeds

Jobboard für Fachinformatiker und IT-Fachkräfte

×
×
  • Neu erstellen...