Net-srac Geschrieben 18. März 2004 Teilen Geschrieben 18. März 2004 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. Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
dgr243 Geschrieben 18. März 2004 Teilen Geschrieben 18. März 2004 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... Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Brunswick Geschrieben 18. März 2004 Teilen Geschrieben 18. März 2004 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; Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Net-srac Geschrieben 18. März 2004 Autor Teilen Geschrieben 18. März 2004 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 Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
dgr243 Geschrieben 18. März 2004 Teilen Geschrieben 18. März 2004 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.... Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Wolle Geschrieben 18. März 2004 Teilen Geschrieben 18. März 2004 Original geschrieben von Net-srac soweit ich weiß unterstützt Mysql4 leider noch keine Subselects. Das ist erst ab Version 5 geplant, die aber noch nicht Stable ist. 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 Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Net-srac Geschrieben 19. März 2004 Autor Teilen Geschrieben 19. März 2004 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... Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Empfohlene Beiträge
Dein Kommentar
Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.