hallo leute!
ich habe lange gegrübelt, wie es wohl möglich wäre, datenbankeinträgen positionen zuzuordnen, z.b. neben dem primärschlüssel eine extra spalte anzulegen, die informationen über die position beinhaltet.
man stelle sich einen adminbereich irgendeiner website vor und nehme mal eine hand voll datenbankeinträge welche geordnet nach ihrem primärschlüssels, einer INT "ID", über PHP ausgegeben werden. ich als admin brauche jetzt neben der möglichkeit einträge zu löschen und zu bearbeiten, auch unbedingt die möglichkeit deren position zu ändern. beispielsweise mit einem button wie "eine position nach oben".
ich bitte euch nur um den grundsätzlichen gedanken!
wäre es eine gute herangehensweise, wenn man sagt, man tausche die primärschlüssel-werte (int-autoincrement) zwischen zwei aufeinander folgenden einträgen? theoretisch gäbe es dabei für kurze zeit eine doppelbelegung des primärschlüssels. habe es noch nicht probiert...erschien mir nicht als die günstigste lösung.
also ich denke mal, ihr seid da schlauer als ich und es müsste ja eigentlich ein bekanntes problem sein!
danke schon maaal...
Seite 1 von 1
Mysql Datenbank einträgen positionen zuordnen und ändern
Anzeige
#2
geschrieben 19. Juni 2007 - 16:14
Ich habe ein Feld INT 'rank' hinzugefügt, in die die Position des Artikel (oder was du auch mmer ordnen willst) gespeichert wird. Den Primärschlüssel lässt du besser unverändert, eine auch kurzzeitige 'Doppelbelegung' ist auf jeden Fall zu vermeiden.
Wird ein neuer Artikel eingefügt, könnte er an eine bestimmte Position gesetzt werden, an den Anfang oder an's Ende vorzugsweise. Wird ein Artikel gelöscht, muss die Rangfolge neu berechnet werden, d.h. die hinter der gelöschten Position liegenden Artikel müssen nachrücken.
Ich weiß nicht, wie diese Funktion in osCommerce oder ähnlichen Systemen umgesetzt ist, da ich meins selbst geschrieben habe. Vielleicht kann mal jemand, der ein solches shopsystem benutzt sagen, auf welche Weise das Problem (ist eigentlich keins) dort gelöst wurde.
Wird ein neuer Artikel eingefügt, könnte er an eine bestimmte Position gesetzt werden, an den Anfang oder an's Ende vorzugsweise. Wird ein Artikel gelöscht, muss die Rangfolge neu berechnet werden, d.h. die hinter der gelöschten Position liegenden Artikel müssen nachrücken.
Ich weiß nicht, wie diese Funktion in osCommerce oder ähnlichen Systemen umgesetzt ist, da ich meins selbst geschrieben habe. Vielleicht kann mal jemand, der ein solches shopsystem benutzt sagen, auf welche Weise das Problem (ist eigentlich keins) dort gelöst wurde.
#3
geschrieben 19. Juni 2007 - 18:33
nee, ist eigentlich kein problem
ja, ich habe mir schon so etwas überlegt. dass der INT-wert für die position bei einem neu hinzugefügten datensatz gleich "mysql_num_rows() + 1" ist. und daraufhin könnte man diese untereinander tauschen, quasi dort diese doppelbelegung entstehen lassen. dann müssten nicht immer alle neu berechnet werden, obwohl du das ja auch hinbekommen hast.
eigentlich ist das ganz gut...müsste eigentlich funzen. gut, dass wir mal darüber gesprochen haben
also dank dir!
vielleicht kommen ja noch paar richtige pro-antworten wa...
ja, ich habe mir schon so etwas überlegt. dass der INT-wert für die position bei einem neu hinzugefügten datensatz gleich "mysql_num_rows() + 1" ist. und daraufhin könnte man diese untereinander tauschen, quasi dort diese doppelbelegung entstehen lassen. dann müssten nicht immer alle neu berechnet werden, obwohl du das ja auch hinbekommen hast.
eigentlich ist das ganz gut...müsste eigentlich funzen. gut, dass wir mal darüber gesprochen haben
also dank dir!
vielleicht kommen ja noch paar richtige pro-antworten wa...
#4
geschrieben 20. Juni 2007 - 08:20
In der Tat ist meine Lösung ein ziemliches PHP-Ungetüm, was sicher nicht das Optimum ist. Leider habe ich nur SQL-Grundkenntnisse, so dass ich nicht weiß, ob eine Lösung nur mit mySQL-Funktionen möglich wäre.
Nötig ist eine lückenlose Sortierung (1,2,3,4,5,6). Wenn ich jetzt Position 4 lösche, muss wieder eine lückenlose Sortierung hergestellt werden (1,2,3,4,5: 1=1, 2=2, 3=3, 4<-5, 5<-6). Dies ist mit PHP möglich, funktioniert bei mir auch tadellos, aber ist vielleicht verbesserungsfähig.
Gäbe es eine mysql-Funktion, die diese Neusortierung vornimmt, nachdem eine Position gelöscht wurde, wäre es deutlich einfacher.
Nötig ist eine lückenlose Sortierung (1,2,3,4,5,6). Wenn ich jetzt Position 4 lösche, muss wieder eine lückenlose Sortierung hergestellt werden (1,2,3,4,5: 1=1, 2=2, 3=3, 4<-5, 5<-6). Dies ist mit PHP möglich, funktioniert bei mir auch tadellos, aber ist vielleicht verbesserungsfähig.
Gäbe es eine mysql-Funktion, die diese Neusortierung vornimmt, nachdem eine Position gelöscht wurde, wäre es deutlich einfacher.
#5 _MagicAndre1981_
geschrieben 20. Juni 2007 - 21:49
warum willst du eine Neusortierung machen? das macht keinen Sinn.
#6
geschrieben 21. Juni 2007 - 07:14
#7 _MagicAndre1981_
geschrieben 21. Juni 2007 - 07:22
eine Sortierung bekommt man per ORDER BY im SQL Statement hin! MySQL ist keine Filebasierte DB!
#8
geschrieben 21. Juni 2007 - 07:30
#9
geschrieben 21. Juni 2007 - 13:45
ja, es geht um eine völlig anpassbare reihenfolge, um eine extra zur ppsitionierung angelegten tabellenspalte.
@axx:
habe es noch nciht probiert. aber heute ist es glaube ich soweit, ich bin bald an der stelle, wo ich es brauche.
@axx:
habe es noch nciht probiert. aber heute ist es glaube ich soweit, ich bin bald an der stelle, wo ich es brauche.
#10
geschrieben 21. Juni 2007 - 14:16
Für was brauchst du das? Ich empfinde das als völlig nutzlos!
In die Datenbank passen 4GB, zumindest wenn du das lokal nutzt. Bei Hostern sieht das schon anders aus.
Aber eigentlich ist das ja auch egal, da die fehlenden ID's letztenendes ja sowieso keinen Speicher wegnehmen würden.
Du kannst mir ja mal deine Lösung per PN oder Mail zukommen lassen, da kann ich ja mal drüberschauen und evtl. was verbessen wenn es etwas zu verbessern gibt!
Hast du auch schonmal in der Hilfe von MySQL oder PHP geguckt?
http://php-center.de <-- gute Seite mit eine Funktionsübersicht
http://php.net <-- Die PHP-Dokumentation mit Funktionsübersicht!
http://dev.mysql.com...1/de/index.html <-- die MySQL Dokumentation
In die Datenbank passen 4GB, zumindest wenn du das lokal nutzt. Bei Hostern sieht das schon anders aus.
Aber eigentlich ist das ja auch egal, da die fehlenden ID's letztenendes ja sowieso keinen Speicher wegnehmen würden.
Du kannst mir ja mal deine Lösung per PN oder Mail zukommen lassen, da kann ich ja mal drüberschauen und evtl. was verbessen wenn es etwas zu verbessern gibt!
Hast du auch schonmal in der Hilfe von MySQL oder PHP geguckt?
http://php-center.de <-- gute Seite mit eine Funktionsübersicht
http://php.net <-- Die PHP-Dokumentation mit Funktionsübersicht!
http://dev.mysql.com...1/de/index.html <-- die MySQL Dokumentation
#11
geschrieben 21. Juni 2007 - 14:33
Zitat (gr4y: 21.06.2007, 15:16)
Für was brauchst du das? Ich empfinde das als völlig nutzlos!
Zitat
In die Datenbank passen 4GB, zumindest wenn du das lokal nutzt. Bei Hostern sieht das schon anders aus.
Aber eigentlich ist das ja auch egal, da die fehlenden ID's letztenendes ja sowieso keinen Speicher wegnehmen würden.
Aber eigentlich ist das ja auch egal, da die fehlenden ID's letztenendes ja sowieso keinen Speicher wegnehmen würden.
Zitat
Du kannst mir ja mal deine Lösung per PN oder Mail zukommen lassen, da kann ich ja mal drüberschauen und evtl. was verbessen wenn es etwas zu verbessern gibt!
Zitat
Hast du auch schonmal in der Hilfe von MySQL oder PHP geguckt?
#12
geschrieben 21. Juni 2007 - 14:47
#13
geschrieben 22. Juni 2007 - 18:47
- ← Brauche Hilfe Für Einen Script Zum Trennen Der I-netverbindung Nach Se
- Skript/Web-Programmierung
- Javascript: Url Des Angeklickten Elements? →
Thema verteilen:
Seite 1 von 1