php.de

Zurück   php.de > Webentwicklung > Datenbanken

Datenbanken SQL und Co

Antwort
 
LinkBack Themen-Optionen Thema bewerten
Alt 16.06.2007, 18:08  
Benutzer
 
Registriert seit: 02.12.2007
Beiträge: 70
Drache befindet sich auf einem aufstrebenden Ast
Standard Position einer zeile in einer sortierten tabelle bestimmen

Hallo,

ich hab ein script, welches listen seitenweise ausgibt. dieses soll zur zuletzt ausgewählten zeile springen, wenn man weg war(logout). gedacht hatte ich mir, dass die id der zeile gespeichert wird und dann zum heraussuchen der position verwendet wird (seitenzahlen speichern ist nicht, da diese sich in der position verändern können).
Mein Problem ist, dass ich nichts finde um die Position der Zeile mithilfe von Mysql zu bestimmen, und ich nicht unbedingt php dazu verwenden will, um die Position zu bestimmen.

die tabelle sieht so aus:
id(einzigst eindeutiger wert) | name | art | sortierung(häufig gleich)
5 | rizinus | ri | ath ->basdf
2 |Â*testt | v2 | badfht ->dthjjtz
30 |Â*asdf | qwe | badfht ->dthjjtz
4 | abcd | df4 |Â*g8egt -> adsrth
9 | tiwd | rka |Â*g8egt -> adsrth
20 | qwer | met | hquf -> jeodl
14 | rewq | sdfg | hquf -> jeodl
15 | tzuiÂ*|Â*hjkl | hquf -> kjeo
sortiert ist die tabelle nach der spalte sortierung.

dankeschön schonmal im vorraus
Nanodragon
__________________
Karteikasten
"Es gibt auch Linux-Aussteiger. Aber die Rückfallquote steigt mit jeder Win-Version." - Walter Saner in de.newusers.questions
Drache ist offline   Mit Zitat antworten
Sponsor Mitteilung
PHP Code Flüsterer

Registriert seit: 21.08.2005
Beiträge: 4682
PHP-Kenntnisse:
Fortgeschritten

Alt 16.06.2007, 18:14  
Erfahrener Benutzer
 
Registriert seit: 21.07.2005
Beiträge: 209
pepe24
Standard

Hallo,

tut mir leid, das raffe ich nicht... Was meinst du mit "wenn man weg war"? Beim Einkaufen? Wenn der Fenster-Focus weg war? Wenn die Session beendet / Browser geschlossen wurde? Bitte werde ein bisschen präziser.

gruß
pepe24 ist offline   Mit Zitat antworten
Alt 16.06.2007, 18:19  
Erfahrener Benutzer
 
Registriert seit: 21.05.2008
Beiträge: 9.937
Zergling-new wird schon bald berühmt werden
Standard

Hallo, du könntest es mit einem SELECT COUNT(*) machen, um die Position zu bestimmen, im zweiten Schritt kennst du ja dann die ermittelte Position und kannst durch das Wissen wie groß eine Seite ist (wieviel Einträge sie beinhaltet), auch auf die Seite schließen, in der sie auftauchen wird.

Code:
SELECT COUNT(*) FROM tabelle WHERE sortierung <= #sortier-wert des gesuchten Datensatzes#
oder mit Sub-SELECTs
Code:
SELECT COUNT(*) FROM table WHERE sortierung <= (SELECT sortierung FROM tabelle WHERE id = #id-wert des gesuchten Datensatzes#
Ergebnis wäre demnach zum Beispiel 479.
Einträge pro Seite sind 25. Demnach suchen wir alle Einträge der Seite 20. Nun müssen wir eine mathematische Funktion finden, die uns aus den bekannten Werten 479 und 25 20 macht. Das wäre zum Beispiel: Aufrunden (479 / 25) = 20 (das solltest du mit PHP oder MySQL hinbekommen).
Somit kämen wir auf
Code:
SELECT * FROM tabelle ORDER BY sortierung ASC LIMIT (#seite# - 1) * 25, 25
Und oh wunder, natürlich kannst du beide Befehle mittels Sub-SELECT auch kombinieren. Ob aber Sub-SELECTs in Sub-SELECTs gehen und wie performant das ganze ist, weiß ich nicht, das musst du einfach mal testen.
Zergling-new ist offline   Mit Zitat antworten
Alt 16.06.2007, 18:43  
Erfahrener Benutzer
 
Registriert seit: 04.12.2004
Beiträge: 129
Ratte78
Standard

Bin mir nicht sicher, das Problem richtig erkannt zu haben. Du sagst die Seitenzahlen können sich ändern (wahscheinlich wenn neue Zeilen eingefügt werden) dann ändert sich die Zeilenposition aber auch !?!

Egal. Folgendes Script nummeriert die sortierten Datensätze.
  • SELECT
    a.id,
    a.name,
    a.art, [list:aade7846cc] (SELECT COUNT(*) FROM tabelle b
    WHERE CONCAT(b.sortierung,b.id) <= CONCAT(a.sortierung,a.id) ORDER BY b.sortierung) AS nummer
FROM
tabelle a ORDER BY a.sortierung /* Ist nur für die Sortierte Ausgabe nötig */
[/list:u:aade7846cc]

Um nur die Zeilennummer der Zeile mit einer bestimmten ID zu erhalten einfach
  • WHERE id = ID
anhängen.

Ach ja. das CONCAT dient dazu einen eindeutigen Wert für den Vergleich zu erhalten. Ausgehend davon, das das Feld Sortierung nicht eindeutig ist.
__________________
Jede Lösung verändert das Problem.
Ratte78 ist offline   Mit Zitat antworten
Alt 16.06.2007, 18:46  
Benutzer
 
Registriert seit: 02.12.2007
Beiträge: 70
Drache befindet sich auf einem aufstrebenden Ast
Standard

@pepe: u.a. ausloggen (wobei des eher nebensache ist)
Zitat:
Zitat von Zergling
Code:
SELECT COUNT(*) FROM tabelle WHERE sortierung <= #sortier-wert des gesuchten Datensatzes#
oder mit Sub-SELECTs
Code:
SELECT COUNT(*) FROM table WHERE sortierung <= (SELECT sortierung FROM tabelle WHERE id = #id-wert des gesuchten Datensatzes#
das würde vorraussetzen, dass die werte von sortierung eindeutig sind, ich hab das beispiel deshalb korrigiert, was aber weniger zutrifft, da der sortierungswert bei mehreren Zeilen gleich ist.
gibt es da noch andere möglichkeiten?
__________________
Karteikasten
"Es gibt auch Linux-Aussteiger. Aber die Rückfallquote steigt mit jeder Win-Version." - Walter Saner in de.newusers.questions
Drache ist offline   Mit Zitat antworten
Alt 16.06.2007, 19:51  
Erfahrener Benutzer
 
Registriert seit: 21.05.2008
Beiträge: 9.937
Zergling-new wird schon bald berühmt werden
Standard

Wenn mehrere Datensätze den selben Sortierwert haben, musst du doch trotzdem festlegen, nach welcher Priorität (zum Beispiel ID) die Datensätze dann untereinander sortiert werden. Dann musst du ja nur WHERE bzw. ORDER BY mit einer zweiten Angabe erweitern.
Zergling-new ist offline   Mit Zitat antworten
Alt 16.06.2007, 21:16  
Benutzer
 
Registriert seit: 02.12.2007
Beiträge: 70
Drache befindet sich auf einem aufstrebenden Ast
Standard

müssen die concat in zwei tabellen sein, oder kann ich da auch die gleiche tabelle verwenden und in eines der concat die gewünschten angaben reinschreiben?
jedenfalls liefert es mir (wenn ich die daten reinschreib und bei einer tabelle bleib) ab der dritten änderung in sortieren zahlen, die ich durch nachzählen nicht bestätigen kann.

@zergling: kannst du mir erklären, wie du das genau meinst?
__________________
Karteikasten
"Es gibt auch Linux-Aussteiger. Aber die Rückfallquote steigt mit jeder Win-Version." - Walter Saner in de.newusers.questions
Drache ist offline   Mit Zitat antworten
Alt 16.06.2007, 22:50  
Erfahrener Benutzer
 
Registriert seit: 04.12.2004
Beiträge: 129
Ratte78
Standard

Das Beispiel bezieht sich auf nur eine Tabelle mit dem Namen "tabelle". "a" und "b" sind Aliasse für die Tabelle "tabelle" um zwei Selects auf eine Tabelle zu unterscheiden.
__________________
Jede Lösung verändert das Problem.
Ratte78 ist offline   Mit Zitat antworten
Alt 17.06.2007, 01:28  
Erfahrener Benutzer
 
Registriert seit: 21.05.2008
Beiträge: 9.937
Zergling-new wird schon bald berühmt werden
Standard

Warum schreibt meinen Nick eigentlich jeder falsch? Zergling!
http://en.wikipedia.org/wiki/Zerg
http://de.wikipedia.org/wiki/StarCraft



Zurück zum Thema:
Verstehst du überhaupt das erste Posting (den SQL-Code) von mir? Ich glaube allerdings, dass Ratte78 hier einen besseren Weg einschlägt, wobei das ganze dann aber auch fehlschlagen wird, sobald ein dritter Parameter ins Spiel kommt (was ja nicht passieren kann, wenn der zweite bereits eindeutig ist). Aber man weiß ja nie, was so alles verschwiegen wird, um das Problem noch halbwegs verständlich zu halten.
Zergling-new ist offline   Mit Zitat antworten
Alt 17.06.2007, 10:45  
Benutzer
 
Registriert seit: 02.12.2007
Beiträge: 70
Drache befindet sich auf einem aufstrebenden Ast
Standard

den sql-code von euch hab ich verstanden.
wobei mir nicht klar ist, wie du das mit den prioritäten meist, und wie man strings mit </> vergleichen kann.
__________________
Karteikasten
"Es gibt auch Linux-Aussteiger. Aber die Rückfallquote steigt mit jeder Win-Version." - Walter Saner in de.newusers.questions
Drache ist offline   Mit Zitat antworten
Antwort


Themen-Optionen
Thema bewerten
Thema bewerten:

Forumregeln
Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are an
Gehe zu

Ähnliche Themen
Thema Autor Forum Antworten Letzter Beitrag
Tabelle mit while nach 4 spalten zur nächsten zeile Supeede PHP Tipps 2008 6 10.05.2008 09:46
Gleiche Felder bei Tabelle, bestimmen was überschrieben wird daniel987 Datenbanken 1 24.05.2006 08:42
Bestimmte Zeile aus Tabelle auslesen anhand von einer Angabe DerTschmi Datenbanken 6 18.03.2006 17:00
[Erledigt] letzte ID und letzte Zeile in einer Tabelle Datenbanken 6 04.03.2006 12:14
Subquery gibt NULL, wenn mehr als eine Zeile in Tabelle tapferesschneiderlein Datenbanken 8 31.07.2005 22:36
[Erledigt] Erste Zeile einer Tabelle wird nicht ausgelesen Datenbanken 11 18.07.2005 02:18
eine zeile in meiner tabelle in der DB löschen GrU3nL!nG Datenbanken 3 13.07.2005 12:57
Zeile einer Tabelle per Mausklick markieren ! Cyberbob_at_tot HTML, Usability und Barrierefreiheit 2 27.06.2005 15:17
Komplette Zeile in eine andere Tabelle kopieren? Cyberbob_at_tot Datenbanken 3 17.06.2005 12:09
Letzte Zeile der Tabelle aus lesen! Blank Datenbanken 10 10.06.2005 16:06
Jede zweite Zeile in einer Tabelle farbig Plague HTML, Usability und Barrierefreiheit 5 21.03.2005 19:10
Über Link einen Zeile aus Tabelle löschen Calli PHP Tipps 2004-2 24 03.12.2004 13:35
jede 2. Zeile aus MySQL Tabelle auslesen PHP Tipps 2004-2 4 09.11.2004 14:25
HILFE: Column count doesn't match value count at row 1 Datenbanken 17 12.06.2004 16:45

Besucher kamen über folgende Suchanfragen bei Google auf diese Seite
http://www.php.de/datenbanken/44209-position-einer-zeile-einer-sortierten-tabelle-bestimmen.html, sql zeilennummer, mysql position in tabelle, mysql zeilen position, sql position in tabelle bestimmen, mysql zeile position, sql position tabelle, sql position einer zeile, sql zeilen position auslesen, sql position datensatz, mysql position ermitteln, mysql position einer zeile, mysql position eines datensatzes, mysql position in tabelle ermitteln, www.zerg.net?s=7846, mysql position der zeile, position einer zeile, einer zeile, bei tabelle ab 3. zeile sortieren, linux sort spalte eindeutig

Alle Zeitangaben in WEZ +2. Es ist jetzt 06:27 Uhr.




Powered by vBulletin® Version 3.7.2 (Deutsch)
Copyright ©2000 - 2012, Jelsoft Enterprises Ltd.
Search Engine Optimization by vBSEO 3.2.0
Aprilia-Forum, Aquaristik-Forum, Liebeskummer-Forum, Zierfisch-Forum, Geizkragen-Forum

Creative Commons License
Dieser Inhalt ist unter einer Creative Commons-Lizenz lizenziert.