Veröffentlicht 16. Mai 200817 j 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).
18. Mai 200817 j 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
18. Mai 200817 j 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.
19. Mai 200817 j Autor 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 200817 j von speedi
19. Mai 200817 j 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
19. Mai 200817 j Autor 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.
19. Mai 200817 j sorry Problem falsch verstanden. Aber Limit sollte da der richtige Ansatz sein. Da kannst du ja Start Datensatz und Anzahl angeben. Bearbeitet 19. Mai 200817 j von Carnie
Erstelle ein Konto oder melde dich an, um einen Kommentar zu schreiben.