cybton.com
Über uns | Jobs | Werbung | Sitemap | AGB | Impressum | Hilfe ?
 Kostenlos anmelden)
Forum
Aktuellste Beiträge
Forenregeln

Community
BB-Codes
Tags
Chat
Suche (Web)
Wer ist online?
Top-User

Basar


Statistik
Mitglieder gesamt: 68142
Mitglieder online: 0
Gäste online: 1
mehr...

Anzeige
Forum » Forum: Website & Webprogrammierung » Thread: [MySQL] Reihenfolge der Datensätze vertauschen

Thread: [MySQL] Reihenfolge der Datensätze vertauschen


09.05.2008 21:22 Uhr

 

Status: offline
Hallo,

ich habe eine Tabelle mit Datensätzen. Diese hat als Primärschlüssel eine ID die auch mittels auto increment hochgezählt wird. Jetzt würde ich gerne versuchen zwei Datensätze zu vertauschen indem man auf einen Link klickt und ihn damit entweder ein nach oben oder unten verschiebt. Allerdings habe ich nur die ID des besagten Datensatzes und nicht die von dem darüber bzw. darunter. Leider kann ich auch nicht einfach ID - 1 bzw. + 1 benutzen, da die ID's nach einem löschen möglicherweise nicht mehr fortlaufend sind.

Nun meine Frage:
Wie kann ich dies realisieren, sprich wie bekomme ich die ID des nächst kleineren oder größeren Datensatzes raus? Was ist besser/einfacher? Die ID rauszufinden, oder nach einem Löschvorgang die ID's so anzupassen, dass sie immer zusammenhängend sind?

Meine Idee war es bisher alle Datensätze in einen numerischen Array einzulesen, um dann rauszufinden, welchen Index meine Anfangs-ID hat. So könnte ich die gesuchte ID finden, allerdings stoße ich auch bereits hier schon an meine Grenzen und habe das Gefühl, dass es evtl. viel einfacher geht...


Vielen Dank im voraus :-)
1 mal bearbeitet
09.05.2008 21:37 Uhr

 

Status: offline
Hm.
Irgendwie macht das keinen Sinn, was du vor hast.
Ein primärer Schlüssel ist nur zum identifizieren des Datensatzes, und nichts anderem. Deswegen würde ich diesen auch in ruhe lassen, und das lieber mit einer order-spalte lösen.

Also einfach eine Spalte, in dem Zahlen stehen. Und nach diesen Zahlen Ordnest du die Datensätze. Sprich:
PHP:
1
select * from table order by order_column;
So muss man nicht die Gesamte Datenbank aktualisieren, wenn ein Datensatz gelöscht wird.
Und Nummerieren kannst du die Datensätze bei der ausgabe ja einfach durch einen Counter den du mit $counter++; mitzählen lässt.

Und wenn du zwei Datensätze vertauschen willst, machste einfach bei dem ersten Datensatz
PHP:
1
datensatz_order_nummer+1
und bei dem zweiten
PHP:
1
datensatz_order_nummer-1
feddich.

Gibt mit sicherheit noch elegantere Methoden. Also warte mal ab, was die anderen so sagen.  :glad: 
2 mal bearbeitet
___________________________
Visit: www.sim4000.de
Ein ball rollt um die Ecke und fällt um.
Intelligenz ist, wenn mein weiß, dass man doof ist.
10.05.2008 11:29 Uhr

 

Status: offline
Aber die order-nummern sind nach einem Löschvorgang doch auch nicht mehr fortlaufend oder hab ich was falsch verstanden?

Ich habe dann nur die Ordernummer von einem Datensatz und muss die nächst kleinere / größere rausbekommen.

Ein Beispiel:

Nr. | Datensatz
1 | Datensatz 1
2 | Datensatz 2
3 | Datensatz 3
4 | Datensatz 4

Nun habe ich aber Datensatz 3 gelöscht:
Nr. | Datensatz
1 | Datensatz 1
2 | Datensatz 2
4 | Datensatz 4

Wenn ich jetzt Datensatz 2 einen nach unten verschieben will brauch ich die nächst höhere Ordernummer, die ist aber nicht einfach 2(+1) ...
10.05.2008 12:47 Uhr

 

Status: offline
Das die nicht fortlaufend sind, is doch egal. Du kannst die Ordernummern auch so machen:
1, 2, 10, 11, 23, 43, 45, 65, ...

Hauptsache es ist die richtige Reihenfolge. Weil angezeigt werden sie doch nicht. Musst nur darauf achten, das wenn ein neuer Datensatz dazu kommt, du wieder einen Wert nimmst, der um einen größer ist als der aktuell höchste. Und das is ja auch nicht weiter schwierig.
PHP:
1
select order_spalte from tabelle order by order_spalte desc limit 0,1
___________________________
Visit: www.sim4000.de
Ein ball rollt um die Ecke und fällt um.
Intelligenz ist, wenn mein weiß, dass man doof ist.
10.05.2008 12:48 Uhr

 

Status: offline
Du hast doch die aktuelle ID. Du liest einfach die Zeile mit der aktuellen und der vorherigen ID aus (mittels Select, order by und Limit = 2) Damit hast du die order nummern und kannst die einfach vertauschen.
___________________________
Programmieren ist eine Sucht deren Rausch ein Gefühl der Macht ist... sofern man den Computer bezwingt. Gefährliche Nebenwirkungen: Verstärkter Kaffee-Konsum, erhöhter Ehrgeiz und ggf. Wutausbrüche und verknotete Gehirnwindungen.
10.05.2008 14:57 Uhr

 

Status: offline
Kannst du mal schreiben wie der mysql query aussehen würde? Ich versteh nich recht wie ich die vorherige ID bekommen soll...
1 mal bearbeitet
10.05.2008 15:22 Uhr

 

Status: offline
Und ich weiß nicht wie deine Datenbank aussieht. Sind die Datensätze nach irgendeinem Schema gruppiert (zb bestimmte Datensätze mit gleicher Gruppenkennung) oder gehören alle Datensätze zusammen?

ID [PK]order_nr(...zusätzliche Daten...)
11
23
42


Aktuelle und nachfolgende Zeile
mysql:
1
SELECT * FROM tabelle ORDER BY order_nr ASC LIMIT 2
Aktuelle und vorhergehende Zeile
mysql:
1
SELECT * FROM tabelle RODER BY order_nr DESC LIMIT 2
Die Ergebnisse kannst du entweder per PHP verarbeiten und damit neue Queries an die Datenbank schicken, oder du verwendest die Rückgabe dieses Queries direkt in einem weiteren.

Natürlich musst du alle Datensätze konsistent halten, wenn du Zeilen löscht, "verschiebst" oder einfügst.
1 mal bearbeitet
___________________________
Programmieren ist eine Sucht deren Rausch ein Gefühl der Macht ist... sofern man den Computer bezwingt. Gefährliche Nebenwirkungen: Verstärkter Kaffee-Konsum, erhöhter Ehrgeiz und ggf. Wutausbrüche und verknotete Gehirnwindungen.
Ähnliche Threads Forum Ähnlichkeitsgrad
 MySQL Grundwissen - Datensatz suchen -> Array Website & Webprogrammierung 2
 MySql-Eintrag löschen, wenn auf Link "löschen" geklickt wird Website & Webprogrammierung 2
 [gelöst] Fragen bezüglich MySQL Website & Webprogrammierung 1
 FTP wo und wie? Fragen zu cybton.com 1
 Mysql zwei Tabellen verbinden Website & Webprogrammierung 1
 [Problem] MySQL mehrere Einträge gleichzeitig verändern geht nicht Website & Webprogrammierung 1
 MySQL nur für Localhost Software & Betriebssysteme 1
nach obennach oben

Copyright © 2008 cybton-network

Google
Partner: #Musik - Dein Internetradio - nexem. - .wir machen news - Your-Book.net - Dein kostenloses Gästebuch
ANEXIA - PHP Entwicklung - Dockers - s.Oliver Schuhe - Think Schuhe - der eigene Weg - Dorfen - Paul Green Schuhe - Bequeme Geox - Web-Entwicklung