• Das Erstellen neuer Accounts wurde ausgesetzt. Bei berechtigtem Interesse bitte Kontaktaufnahme über die üblichen Wege. Beste Grüße der Admin

Position eines Datensatzes bei sich ändernden Sortierungen ermitteln

Crashdown

New member
Hallo liebe Community,
habe da ein Problem mit dem sich wohl schon viele rumgeschlagen haben. Momentan arbeite ich an einem JS-Script, welches den Inhalt eines Overflow-Elements dynamisch lädt, je nachdem wie der User scrollt. Der Unterschied zu vorhandenen Ansätzen, der User sieht von Anfang an wie viele Elemente es gibt (Scrollbalken) sodass kein Endlosfenster entsteht. Des Weiteren soll es möglich sein, den Inhalt nach verschiedenen Kriterien sortieren zu lassen. Hintergrund ist ein Programm zum verwalten und Teilen von Mp3-Dateien.

Habe ich nun einen bestimmten Track im Fenster und lasse die Tabelle neu sortieren steht dieser Track, in der neuen Sortierung an einer andren Position als zuvor und damit auch in meinem Overflow Element. Um diesen nach wie vor im Fenster anzuzeigen bräuchte ich die Position, die mein Track in der Tabelle momentan einnimmt, auch weil ich mit LIMIT in MySQL arbeite.

Über einen Ansatz bin ich schon mal gestolpert. Dieser sieht vor, alle Elemente, die größer bzw. kleiner sind als mein Track zu zählen und daraus die aktuelle Position zu ermitteln. Das geht doch aber bestimmt noch etwas eleganter oder?;)
 
Habe ich nun einen bestimmten Track im Fenster und lasse die Tabelle neu sortieren steht dieser Track, in der neuen Sortierung an einer andren Position als zuvor und damit auch in meinem Overflow Element. Um diesen nach wie vor im Fenster anzuzeigen bräuchte ich die Position, die mein Track in der Tabelle momentan einnimmt, auch weil ich mit LIMIT in MySQL arbeite.
Wozu brauchst du die Position?
 
Also das mit dem dynamischen nachladen der Daten habe ich so gelößst, dass ich die Datensätze immer Stapelweise abrufe sagen wir a 30 Datensätzen. Scrollt der User berechnet JS anhand der gescrollten Pixel ob ein neuer Stapel nachgeladen werden muss oder sich der User noch innerhalb der sichtbaren Daten befindet ( momentan sind immer 5 Stapel runter geladen ). Muss ein neuer geladen werden übermittelt JS den Index dieses Stapels and den Server. Muss beispielsweise der 6. Stapel (Datensätze 151- 180) runter geladen werden dann lädt der Server die daten ungefär so:
PHP:
$limit = ($_POST['stapel'] -1) * 30
$sql = "SELECT name FROM tracks LIMIT $limit, 30"

Nun kann es aber sein, dass der User selbst Datensätze zu Meidathek hinzufügt oder sie neu sortiert. Jedenfalls ändert sich dann die Position des Tracks, der momentan abgespielt wird, zu den anderen. Das Fenster soll sich nun so neu positionieren, dass wieder dieser Track angezeigt wird und um die Umgebenden Stapel abzurufen müsste ich wissen, an welcher Position sich dieser momentan befindet. Hoffe das war hilfreich.
 
soweit ich verstehe musst du dir merken, welcher Track gerade gespielt wird und ermitteln welcher in der neuen Liste dieser aktuelle gerade ist und dann dahin scrollen.
 
Sozusagen. Es geht einfach ganz allgemein darum, dass jeder Datensatz in einer Select Anweisung eine Position zugeordnet bekommen muss. Diese verwendet beispielsweise LIMIT mit dem ersten Argument. Gibt es eine Funktion mithilfe derer man diese Position eines bestimmten Datensatzes heraus finden kann, sodass ich zum Beispiel die 30 darauffolgenden Datensätze abrufen kann? Das oben war nur ein Beispiel, ich bräuchte diese Funktion noch an ganz anderen Stellen.
 
Nein, sorry. Der Datensatz ist bekannt, zum Beispiel über dessen Id. MySQL soll dann rausfinden welche Position dieser Datensatz in der aktuellen Sortierung einnimmt.
 
Naja, du weißt doch im Skript, welches der aktuelle Datensatz ist, dann kannst du das beim Ausgeben markieren und dann im Browser reagieren
 
Ja nur dass ich im Browser ja nicht alle Datensätze vorhanden habe sondern immer nur 150 Stück und damit mir der Server genau die 150 Stück zurück liefern kann, die meinen Datensatz umgeben brauche ich dessen Position. Für die LIMIT Anweisung.
 
^^ Da sind schon andere dran gescheitert. Ich probiers noch ein mal.
Sagen wir wir haben eine Tabelle mit den Feldern id, vorname, nachname die momentan nach dem Nachnamen sortiert ist:
1 Peter Müller
2 Franz Mustermann
3 Elise Strauss

In dieser Sortierung nimmt der Datensatz Peter Müller die Position 1 ein. Würde ich nach dem Vornamen sortieren wäre es die Position 3. Ich bräuchte eine Funktionj oder Abfrage die mir genau diese Position liefert. An welcher Stelle ein beliebiger Datensatz mit einer bestimmten Sortierung steht.
 
Über einen Ansatz bin ich schon mal gestolpert. Dieser sieht vor, alle Elemente, die größer bzw. kleiner sind als mein Track zu zählen und daraus die aktuelle Position zu ermitteln. Das geht doch aber bestimmt noch etwas eleganter oder?;)

Genau so macht man das, wüsste keinen anderen weg.
Position ermittelst du mit ner einfachen query: SELECT COUNT(*) +1 FROM table WHERE sortfield < 'yourval'
prinzipiell kann man das auch cachen (position pro feld pro sortierung), ist aufwendiger beim einpflegen von daten, dafür performanter beim rausholen
 
Nein! Jetzt verstehe ich es - vermutlich - du willst die Nummerierung der Datensätze?
Das habe ich bisher nur Serverseitig erledigt und gehört meiner Meinung nach auch da hin
 
ja da bliebe es ja auch. JS übermittelt die Id des Datensatzes, der im Sichtfeld erscheinen soll, der Server berechnet dessen Position und liefert den umgebenden Stapel an Datensätzen (inklusive des übermittelten) zurück, JS zeigt alle Datensätze im Fenster an und markiert den entsprechenden Datensatz.
 
Zurück
Oben