Veröffentlicht 18. März 200421 j 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.
18. März 200421 j 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...
18. März 200421 j 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;
18. März 200421 j 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
18. März 200421 j 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....
18. März 200421 j 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
19. März 200421 j 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...
Archiv
Dieses Thema wurde archiviert und kann nicht mehr beantwortet werden.