Sie befinden sich hier im Forenarchiv von phpforum.de wenn Sie direkt ins Forum möchten, klicken Sie bitte hier. Zur Startseite kommen Sie hier.

die letzten drei und die nächsten zwei zeilen mitausgeben

Hallo,
ich habe ein Problem.
Ich möchte in meiner MySQL Abfrage von einem gewissen Punkte aus die nächsten zwei Datenzeilen und die letzten drei datenzeilen einschließlich des Ausgangspunktes ausgeben lassen.

Hat jemand einen Anhaltspunkt für mich?
Danke im foraus für alle Lösungen und Tipps :)

Hier gehts zum Orginal Eintrag "die letzten drei und die nächsten zwei zeilen mitausgeben" im Forum

Antworten

Wofür soll das sinnvoll sein?


2.

Du willst also 5 Datenzeilen auslesen, von denen eine in der Mitte vorgegeben ist??? Dann arbeite mit LIMIT $x, 5 und pass den Startpunkt $x entsprechend immer an (vom Ausgangspunkt zwei abziehen......).


3.

Danke Gary darauf hätte ich auch kommen können. Aber ich pack manchmal alles viel zu kompliziert an. :)
@ ak: ich möchte aus einer Liste von Terminen den aktuellen, die folgenden und letzten anzeigen lassen. Es soll halt nur ein Ausschnitt von allen Terminen sein.


4.

Probleme könnte es nur geben, wenn die Termine nicht fortlaufend numeriert sind (also z.B. 1, 2, 4, 5, 6), weil einer gelöscht wurde. Ist dein aktueller Termin 4 ziehst du zwei ab, landest bei 2 (und nicht bei 1) und würdest dann die nächsten 5 auslesen (2, 4, 5, 6). Oder du fragst mit LIMIT und zweit Abfragen jeweils die 2 Termine davor und die zwei Termine danach ab.....


5.

Ganz genau deshalb frage ich... solange es nämlich keine definierte Reihenfolge (z.B. durch ORDER BY oder GROUP BY) gibt, haben die Datensätze per Definition keine Reihenfolge. Es gibt also gar kein davor und danach.


6.

Natürlich definiere ich die Reihenfolge mit ORDER BY aber nicht anhand der ID, sondern anhand eines extra Datumseintrages in einer extra Spalte.

Der Eintrag in dieser Spalte setzt sich aus dem Termindatum wie folgt zusammen: JJJJMMTT
Somit suche ich nach der Zahl in der Form JJJJMMTT die der aktuellen Datum am nähesten kommt.

Damit bestimme ich den "Ausgangspunkt"
.....



Habt ihr bessere Ideen? So funktioniert es ja bis jetzt ganz gut!
Aber ich bin für Vorschläge immer offen :)


7.

Ich würde an Deiner Stelle gleich ein Feld vom Typ "date" nehmen, warum der Umstand das erst in ein Varchar o.Ä. zu konvertieren?
Und dann würde ich trotzdem noch einen Schlüssel mit in die Sortierung einziehen, denn falls es bei Deiner Lösung mehrere Termine an einem Tag gibt, hast Du weder einen festen Ausgangspunkt, noch einen definierte Reihenfolge innerhalb der Termine eines Tages.


8.

Hi, danke für den Tipp.
Ich kann keine Feld vom Typ "date" nehmen, da ich ja nicht das aktuelle, sondern ein bestimmtes noch kommendes Datum benötige. Ein "Varchar" ist natürlich ungeeignet, da hier nach dem "Alphabet" sortiert werden kann, nicht aber "nummerisch". Ich habe ein "int" genommen.

Einen zusätzlichen Schlüssel brauche ich nicht. Wenn an einem Tag 5 Termine sind, dann soll er die auch ausgeben :)

Gelöst habe ich das Problem ja damit, dass ich 2 Abfragen machen lasse. Die eine gibt Zahlen >= dem aktuellen Datum (JJJJMMTT) aus, die andere mit Zahlen < dem aktuellen Datum.

Somit brauche ich keinen "echten festen Ausgangspunkt" und die "Reihenfolge" ist egal - da ich ja sage: Wenn heute 5 Termine sind, dann sollen die dastehen, egal in welche reihenfolge. Immerhin habe ich auch keine Uhrzeit dazu geschrieben.


9.

Zitat:
michi_G postete
Ich kann keine Feld vom Typ "date" nehmen, da ich ja nicht das aktuelle, sondern ein bestimmtes noch kommendes Datum benötige.
Na und? ;)
Mit Date kannst Du doch auch alle möglichen zukünftigen und vergangenen Daten darstellen. Zitat aus der Doku: "The supported range is '1000-01-01' to '9999-12-31'" - das sollte doch reichen...

Zitat:
Somit brauche ich keinen "echten festen Ausgangspunkt" und die "Reihenfolge" ist egal - da ich ja sage: Wenn heute 5 Termine sind, dann sollen die dastehen, egal in welche reihenfolge. Immerhin habe ich auch keine Uhrzeit dazu geschrieben.
Ja, aber wenn es - sagen wir mal - 10 Termine an einem Tag gibt, dann haben diese 10 ja eine nicht definierte Reihenfolge, jedenfalls aus Sicht der Datenbank. Du kannst also nicht mit Sicherheit vorhersagen, welche 5 genau aus den 10 vorhandenen erscheinen werden. Also mußt Du als Entwickler immer davor ausgehen, daß die Datenbank bei jedem neuen Aufruf die 5 aus 10 anders ausgibt, und dies würde der Anwender dann so sehen und ihn sicher verwirren.


10.

ok, ich gebe mich geschladen. Danke :)


Hier gehts zum Orginal Eintrag "die letzten drei und die nächsten zwei zeilen mitausgeben" im Forum
 
phpforum.de | Impressum