speedi Geschrieben 16. Mai 2008 Teilen Geschrieben 16. Mai 2008 Hi, ich kenne mich mit SQL nur sehr bedingt aus. Jedenfalls muss ich nun eine Abfrage formulieren, welche mir einen bestimmten Datensatz ausgibt. Ich habe meine Tabelle bei der die Spalte MsgID den Primärschlüssel (int) darstellt. MsgIDs treten immer nur einmal auf, können jedoch lückenhaft sein (z.B. 2,6,7,8,15,17,19...). Jetzt kann es sein, dass ich die Letzte Message vor Message Nr. 15 brauche (in dem Fall wäre das die Nr. 8), das Frage ich mit "SELECT * FROM messages10103 where MsgId < 15 order by MsgID DESC LIMIT 1" ab. Wie müsste ich aber nun die Abfrage formulieren, damit ich das x. kleinere von 15 bekommen (z.B. x wäre 3, dann würde ich gern die MsgID 6 abragen). Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Reinhold Geschrieben 18. Mai 2008 Teilen Geschrieben 18. Mai 2008 Moin, Wie müsste ich aber nun die Abfrage formulieren, damit ich das x. kleinere von 15 bekommen. nur mal so interessehalber: wozu soll das denn jemals gut sein? Gibt es da eine konkrete Problemstellung? Und wenn ja, kannst du die hier dann angeben? :confused::confused::confused: Reinhold Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
baba007 Geschrieben 18. Mai 2008 Teilen Geschrieben 18. Mai 2008 das habe ich mich auch gefragt als ich versuchte die logik zu verstehen ist mit sicherheit irgend so ein workaround, weil andere umsetzungstechniken nicht bekannt sind. Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
speedi Geschrieben 19. Mai 2008 Autor Teilen Geschrieben 19. Mai 2008 (bearbeitet) In der Datenbank werden in regelmäßigen Abständen Statusinformationen eines bestimmten Objekts mit fortlaufenden MessageIDs (die ID kann sozusagen fast als eine Art Tmestamp angesehen werden; nur dass sie keine direkte Uhrzeit darstellt) gespeichert. Es kann vorkommen, dass Messages aus der Datenbank gelöscht werden (deshalb kann ich nicht davon ausgehen, dass nach MsgID 8 auch wirklich MsgID 9 kommt. Das X. kleinere Element von Y. muss ich abfragen, um die Daten mit einem bestimmten Zeitraster in einem Programm anzeigen zu können. Mein Programm zeigt immer 7 Datensätze parallel in einer Art Tabelle an, wenn man einen Datensatz mit kleinerer oder größerer MsgID sehen will scrollt man im Programm nach oben oder unten und das Programm lädt die entsprechenden Informationen aus der Datenbank. Wenn jetzt allerdings mehrere 1000 einträge in der Datenbank sind kann das mit dem scrollen, so eine Sache werden, wenn man immer in einzelschritten scrollt. Deshalb möchte ich dann nur noch jeden 10. Datensatz (oder so...) anzeigen. Die genaue Zahl stellt der User über einen Regler ein. Natürlich könnte ich das Problem auch programmseitig lösen, indem ich einfach die 10 nächsten Datensätze ausgebe bei denen die MsgID kleiner ist und dann im Programm durchgehen bis zum letzten, aber da die Datensätze mitunter sehr viele Informationen Enthalten und schonmal 1 MB groß sein können, würde ich mit so einer Lösung unnütz Netzlast schaffen, die Datenbank stressen, mein Programm stressen und ehe ich mich versehen brauch ich HighEndHardware. ist mit sicherheit irgend so ein workaround, weil andere umsetzungstechniken nicht bekannt sind. In meinen Augen ist es die sauberste Lösung die Datenbank gleich genau das zu fragen, was ich wissen will, anstelle das zu fragen, was ich fragen kann um mir dann die entsprechende Antwort auzusortieren. Oder würde hier irgendwer versuchen für eine Autofahrt von München nach Frankfurt sich alle Routen von München nach Hessen ausgeben zu lassen um sich dann aus denen die Route nach Frankfurt rauszusuchen?! Bearbeitet 19. Mai 2008 von speedi Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
dr.dimitri Geschrieben 19. Mai 2008 Teilen Geschrieben 19. Mai 2008 Ander ausgedrückt, Du möchtest das implementieren was man "Blättern" nennt. Welche Datenbank verwendest Du? Oder Du suchst direkt nach Blättern und deiner DB in google, dort findest Du sofort diverse Beispiele. Dim Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
speedi Geschrieben 19. Mai 2008 Autor Teilen Geschrieben 19. Mai 2008 Ich verwende MySQL. Ich denke nicht das man das was ich machen will als Blättern bezeichnet. Wie gesagt ich will nur das die Datenbank zu einem bestimmten Datensatz (Nr. (int) X springt) und von da eine Anzahl ((int)Y) Datensätze nach oben geht. Aber ich werd mal in google suchen (hab ich zwar schon, aber ok, vielleicht bringt das neue Stichwort ja was. Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Carnie Geschrieben 19. Mai 2008 Teilen Geschrieben 19. Mai 2008 (bearbeitet) sorry Problem falsch verstanden. Aber Limit sollte da der richtige Ansatz sein. Da kannst du ja Start Datensatz und Anzahl angeben. Bearbeitet 19. Mai 2008 von Carnie 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.