In sortierte Freundesliste eintragen

kuhlmaehn

Erfahrenes Mitglied
Hi, ich hab mal eine Frage mit der ich nicht vorankomme...
Es gibt eine normale Benutzerverwaltung mit id und Passwort und so und nun soll jeder Benutzer eine Freundesliste haben können. Diese Liste kann er sortieren, also 1. Freun, 2. Freund, usw.
Jetzt wollte ich das in einer Tabelle speichern die so aussieht:
benutzer id | freund id | platz
Benutzer id wiederholt sich dann natürlich pro Benutzer mehrmals.
Mein Problem ist nun, wie ich die Reihnfolge nachträglich ändern kann. Also z.B. ein neuer Freund soll irgendwo in die Mitte. Z.B. zwischen den 3. und 4. Freund soll nun ein neuer, dann muss ja alles aufgeschoben werden. Muss ich das mit php auslesen, neu sortieren und dann wieder reinschreiben oder geht das auch eleganter?
Achso und ist diese Form der Speicherung überhaupt gut?
Vielen Dank schonmal! :)
 
Hi,

Mein Problem ist nun, wie ich die Reihnfolge nachträglich ändern kann. Also z.B. ein neuer Freund soll irgendwo in die Mitte. Z.B. zwischen den 3. und 4. Freund soll nun ein neuer, dann muss ja alles aufgeschoben werden.

Du könntest vorher mit einem entsprechenden SQL-Update Statement die alten Kumpels ein wenig aufrücken lassen. ;)

Vielleicht hilft Dir Gumbos Lösung zum Thema "Verschieben von Datensätzen".

LG
 
Es würde doch reichen wenn du sagst wer der Nachfolger in der Rangliste ist.

Also:
1. Freund: Heiko
2. Freund: Maria
3. Freund: Markus
4. Freund: Anja

In der Datenbank
Heiko - Maria
Maria - Markus
Markus - Anja
Anja -

Dann vielleicht noch mit nem Flag markieren dass Heiko der erste ist.

Wenn du dann zwischen 2 und 3 noch Ilse einfügen willst dann musst du nur den nachfolger von Maria ändern und den von Ilse auf Markus setzen.

Das entspräche dann einer einfach verketteten Liste in einer Datenbank.
 
Mh klingt interessant, dann würde ich das z.B. so anlegen oder?
Code:
id | freund1_id | freund2_id
1       NULL          2
1       4             2
1       2             5
1       5             3
1       3            NULL
2      ...
Und dann würd ich das für User 1 mit SELECT freund1_id, freund2_id FROM bla WHERE id='1' abfragen und dann in php verarbeiten?
Wie würd ich denn dann mit SQL einfügen oder löschen? Wirkt irgendwie auch etwas kompliziert!? :confused:
Gumbos Lösung sieht auch interessant aus, muss ich aber nochmal etwas genauer studieren...
Danke euch soweit :)
 
Hi,

mit einer verketteten Liste wäre aber ein sortiertes Auslesen per SQL nicht mehr möglich, oder fehlt mir da gerade die Phantasie? *grübel*

Gumbos Ansatz ist eigentlich recht einfach. Beispiel:

Code:
user_id | freund_id | platz
   1         4         2
   1         2         4
   1         5         3
   1         3         1
   2      ...


Jetzt möchtest Du dem Benutzer 1 Freund 6 an Position 3 hinzufügen. Also lässt Du alle Freunde von User 1 mit Platz >= 3 "eins aufrücken":

SQL:
update freunde 
   set platz = platz + 1 
   where user_id = 1 and platz >= 3

Resultat:

Code:
user_id | freund_id | platz
   1         4         2
   1         2         5
   1         5         4
   1         3         1
   2      ...

Jetzt kannst Du Freund 6 an Platz 3 einfügen, feddich. ;)

LG
 
Ah danke kuddel, das hab ich vorhin nicht gleich überblickt aber das sieht gut aus. Vorallem unkompliziert =)
Danke euch...
 
Zurück