[PHP+MySQL] Tabellenzeilen in bestimmter Reihenfolge auslesen

Toengel

Commander
Registriert
Aug. 2001
Beiträge
2.525
Tachchen,

also ich hab folgende Tabelle:

Code:
Tabelle: test

id  |  eintrag
--------------
1   |  test1.0
2   |  test2.0
3   |  test3.0
4   |  test1.1
5   |  test3.1

Wenn ich nun diese Tabelle auslesen, moechte ich, dass sie in der Reihenfolge:
id 1, id 4, id 2, id 3, id 5
als Result rauskommt.
Ich hatte jetzt als einzige Idee, die Reihenfolge in einer Extratabelle abzuspeichern (genauer gesagt in einem Array) und dann fuer jedes Arrayelement die zugehoerige Zeile der test-Tabelle mit einer Extraanfrage auszulesen:
Code:
SELECT * FROM test WHERE id = '1'
SELECT * FROM test WHERE id = '4'
SELECT * FROM test WHERE id = '2'
SELECT * FROM test WHERE id = '3'
SELECT * FROM test WHERE id = '5'
Jedoch finde ich, dass das eine sehr schlecht Loesung ist, um eine Reihenfolge im Endeffekt zu erhalten. Die einzige Sortiermoeglichkeit, die ich kenne ist die ORDER BY spaltenname DESC bzw ASC. Oder gibts da eine elegantere Loesung?

Toengel@Alex
 
also ich nominier das mal für's Aquarium :)
 
Loopo, offenbar hat er seine Frage sehr ernst gemeint, sonst hätte er sie wohl kaum so ausführlich beschrieben. Und auch wenn die Frage seltsam erscheint, rechtfertigt das nicht, sie zu den Fischen zu packen, solange er nicht mit Absicht Scherzfragen stellt.
 
Tachchen,

wenn ich nach der id-Spalte sortiere, komme ich ja nicht zu dem Ergebnis, was ich haben will. Ich moechte ja, dass im MySQL Result die Zeilen in der Reihenfolge:
id 1
id 4
id 2
id 3
id 5
stehen. Wenn ich SELECT * FROM test ORDER BY 'id' ASC mache, kommt ja die Reihenfolge:
id 1
id 2
id 3
id 4
id 5
heraus.

Ich hoffe, das war verstaendlicher...

Toengel@Alex
 
Achso. In dem Fall mach noch eine Spalte "reihenfolge", "sequence" oder kurz "seq" in der du die Reihenfolge speicherst und dann danach mit ORDER BY sortiert ausgibst. Die Idee mit dem PHP-Array finde ich nicht so gut, weil du dann bei Veränderungen an der Tabelle auch dein PHP-Script anpassen müsstest.
 
Tachchen,

ja, die Idee ist nicht schlecht, jedoch sollen zu der Tabelle test spaeter noch Eintraege hinzukommen (sonst koennte ich auch gleich alles richtig geordnet in die Tabelle eintragen und sortiert nach der id-Spalte das Result erstellen), die sich z.B. zwischen id2 und id3 ansiedeln. Das ganze soll halt dynamisch sein...

Toengel@Alex
 
Original erstellt von Toengel
Wenn ich SELECT * FROM test ORDER BY 'id' ASC mache, kommt ja die Reihenfolge:
id 1
id 2
id 3
id 4
id 5
heraus.

du sollst auch nicht nach 'id' sortieren sondern nach 'eintrag' :rolleyes:

PHP:
SELECT * FROM test ORDER BY 'eintrag' ASC
 
Tachchen,

gut gemeint... :-) In der Eintragspalte stehen spaeter Texte... Ich habe oben nur die Spalte 'Eintrag' mit den bestimmten Werten gefuellt, um mein Anliegen besser darstellen zu koennen...

Toengel@Alex
 
wenn es kein automatisierbares Kriterium gibt, nach dem die Einträge sortiert werden sollen, bleibt dir nichts anderes übrig als ein Feld anzulegen, welches die Position/Reihenfolge angibt

dieses müsstest du dann manuell ändern, wenn die Reihenfolge von der Chronologie abweicht
 
Tachchen,

deshalb hab ich mir ja auch gedacht, dass ich die Reihenfolge in nem String bzw nem Array in einer anderen Tabelle speichere - da kann ich ja dann auch leicht per PHP neue Elemente hinzufuegen. Es ging mir jetzt hauptsaechlich drum, wie ich jetzt am besten mittels des Arrays bzw. Strings die Tabelle 'test' auslese. Schoen waere ja ... ORDER BY array() - aber sowas wird wohl nicht gehen. Oder gibts da sonst noch Vorschlaege?

Oder nehmen wir mal an, mein Result ist nach der ID sortiert. Wie koennte ich es denn in einer bestimmten Reihenfolge (Array, String) auslesen?

Toengel@Alex
 
nein wozu eine extra Datei anlegen ? einfach in der Datenbank speichern

dabei ein autoincrement Feld anlegen, damit wird schon mal chronologisch von selbst sortiert

danach schreibst du dir eine einfache Funktion zum verschieben eines Datensatzes:

wenn deine Datenbank so aussieht:
Code:
id	position

1	1
2	3
3	2
4	4

und du möchtest id 4 an Position 2, rufst du zunächst alle Datensätze Position 2 oder höher ab, nun inkrementierst du jede Position um 1 und gibst der id 4 die Position 2, danach sieht es dann halt so aus:

Code:
id	position

1	1
2	4
3	3
4	2
 
So wie ich das mit den Testdaten verstanden habe, willst du eine Art von hierarchischer Ordnung:

1.0
1.1
2.0
3.0
3.1

Kannst du nicht diese Nummern in ne eigene Spalte packen und danach dann ORDER BY num ASC machen?

Ich denke mal, dass das nicht zufällig solche Nummerierungen sind.

-alex
 
Tachchen,

es stehen (wie bereits oben erwaehnt) spaeter Texte in der Spalte. Loopos Idee wird die beste sein - ein kleiner Join und das Ganze wird gehen... (wenn ich mal Zeit hab um das umzusetzen *G*)...

Toengel@Alex
 
Original erstellt von Toengel
Tachchen,
es stehen (wie bereits oben erwaehnt) spaeter Texte in der Spalte.
[snip]
Toengel@Alex
Oha... ersten post lesen und antworten :|
Wer (weiter) lesen kann ist klar im Vorteil :)

-alex
 
Zurück
Oben