datensätze sortieren (nicht order by)

saimoto

Mitglied
hallo,
weiss jemand, wie ich am besten per hand datesätze eines selects sortiere?
Versuche, den vorherigen und den nachfolgenden datensatz eines selects anzeigen zu lassen, finde aber keine lösung dafür.
 
Also sortierte Ausgaben per SELECT - Anweisungen gehen nun ausschl. über ORDER BY oder GROUP BY. Du kannst das ganze dann noch einschränken mit LIMIT. Ansonsten ist da nüx, wonach du sortieren kannst. Ach ja, DESC und ASC aber nur in Verbindung mit ORDER BY.

Was willst du denn genau machen?
 
ich will datensätze per hand sortieren, also den datensatz eine position hoch oder runter schieben. ich könnte vielleichtdie datensätze in ein array zwischenspeichern und da sortieren.
ich habe mir gedacht, ich suche den datensatz und die beiden oberhalb und unterhalb, dann mache ich ein update der id auf zwei der datensätze, je nachdem ob der datensatz nach oben oder nach unten soll. der eine bekommt die id des anderen und umgekehrt.
 
ich versteh nicht ganz, worauf das hinauslaufen soll?

Du hast nehmen wir an drei Einträge in der DB von insgesamt 100. Den gesuchten Eintrag befindet sich mit id auf 50. Suchst du jetzt noch 49 und 51 oder wie ist das zu verstehen?

Natürlich kannst du das alles in ein array() einspeisen. Wo soll das Problem liegen?

Beschreib doch mal um was es genau geht............
 
ja genau, ich suche den eintrag 49 und 51.
der eintrag 50 soll jetzt z.B. eins nach oben, bekommt also die id des eintrags 49, der eintrag 49 bekommt die id des eintrags 50. so hab ich die position beider einträge vertauscht. das wärs eigentlich. nur wie bekomme ich die id der einträge 49 und51 heraus?
 
Wie wie bekommst du die id heraus? Wie sollst du die herausbekommen, wenn die ID durch den Tausch nach wie vor vergeben ist?

du müsstest wenn diese beiden Zeilen vor dem Tausch löschen und die im array gespeicherten Werte danach wieder in die DB eintragen. Auf diesem Weg kannst du gleichzeitig die id neu vergeben.
 
klar,so gehts, aber wie komme ich an die id des datensatzes vor dem, den ich selected habe? die brauche ich ja, um den zu löschen, dem ausgewählten ds diese id zugeben und der gelöschte muss ja dann die id des anderen bekommen.
 
Du musst ja irgendwas haben um in der DB suchen zu können. Angenommen du hast das entsprechende gefunden, dann lässt du dir einfach die id ausgeben.

Dann wählst du frei eine Variable

$x = $ausgabe_db->id - 1;

Hiermit hast du bereits statt 50 die 49. Dann machst du einen neue DB-Anfrage per
SELECT id FROM tabelle WHERE id>='$x' LIMIT 3

und somit hast du die drei nachfolgenden Einträge in der DB, welche du nun einfach in ein array(); Danach löscht du die einträge, rufst dein array() wieder auf und lässt den Inhalt in Textfelder ausgeben. Editieren und fertig. Absenden und per INSERT INTO .... wieder in die DB zurück.
 
das problem ist nur, dass bei
$x = $ausgabe_db->id - 1
die id`s keinen größeren abstand haben dürfen als 1. es kann doch sein dass die vorherige id 3 ziffern kleiner ist, weil zwischendurch was gelöscht wurde.
 
Wenn du aber ORDER BY id in den SELECT einbindest nicht. Zudem solltest du bei INSERT INTO table eine vorherige id prüfen, welche frei ist und somit unterbindet man auch diese Leerfelder bzw. das Verschieben der Zählung.

Für was bauchst du eigentl. diese Vorgehensweise. Frage aus dem Grund, weil es ja sein könnte, das es da noch andere Lösungen gibt als die von dir angedachte?
 
Zurück