06.03.2009, 20:59
Hi MyBBCoder,
ich sitze momentan an einem MySQL-Statement, was einfach nicht das gewünschte Ergebnis bringen will.
Sinn des Statements:
Ich habe eine Tabelle ft_tracks, aus der ich die Tracks rausladen und nach Author sortieren will. Das Problem ist, dass der User 'Psyduck' (uid 4) eine spezielle Aufgabe hat und als 'FunTrackers' in der Liste erscheinen soll. Eine einfache Sortierung ist also nicht möglich, da ja so mit 'Psyduck' und nicht mit 'FunTrackers' sortiert wird.
Meine Idee nun:
Zuerst alle Tracks von Autoren, die vor 'FunTrackers' kommen, raussuchen. Als zweites die von Psyduck selbst (der Username wird dann im PHP Script entsprechend angepasst), als letztes dann alle, die mit Namen nach 'FunTrackers' kommen.
Die einzelnen Unterabfragen sind dabei zuerst nach dem Autor (Username), und als zweites nach Trackname (Name) sortiert. 2 Unions sollen diese 3 Listen dann "zusammenschweißen".
Hier mal das gesamte Statement:
Das Problem:
Führe ich die Unterabfragen einzeln aus, funktioniert alles: Die Tracks sind richtig sortiert.
Sobald ich aber ein UNION mit reinbringe, wird die Sortierung anscheinend wieder über den Haufen geworfen, ein Autor mit "bo" erscheint auf einmal vor "Am" (und die Tracks ein und desselben Autors sind auch nicht mehr nach Trackname sortiert)
Ich hoffe das Problem wird soweit klar, und mir kann jemand helfen
MfG Zwoetzen
ich sitze momentan an einem MySQL-Statement, was einfach nicht das gewünschte Ergebnis bringen will.
Sinn des Statements:
Ich habe eine Tabelle ft_tracks, aus der ich die Tracks rausladen und nach Author sortieren will. Das Problem ist, dass der User 'Psyduck' (uid 4) eine spezielle Aufgabe hat und als 'FunTrackers' in der Liste erscheinen soll. Eine einfache Sortierung ist also nicht möglich, da ja so mit 'Psyduck' und nicht mit 'FunTrackers' sortiert wird.
Meine Idee nun:
Zuerst alle Tracks von Autoren, die vor 'FunTrackers' kommen, raussuchen. Als zweites die von Psyduck selbst (der Username wird dann im PHP Script entsprechend angepasst), als letztes dann alle, die mit Namen nach 'FunTrackers' kommen.
Die einzelnen Unterabfragen sind dabei zuerst nach dem Autor (Username), und als zweites nach Trackname (Name) sortiert. 2 Unions sollen diese 3 Listen dann "zusammenschweißen".
Hier mal das gesamte Statement:
Code:
SELECT r.tid, r.uid, r.name, r.author, r.envi, r.difficulty, r.`release` FROM
(
(
SELECT t.tid, t.uid, t.name, t.envi, t.difficulty, t.release, t.beta, u.username AS author
FROM ft_tracks t
LEFT JOIN ft_users u ON t.uid=u.uid
WHERE u.username<'FunTrackers'
AND u.uid!='4'
ORDER BY u.username ASC, t.name ASC
)
UNION
(
SELECT t.tid, t.uid, t.name, t.envi, t.difficulty, t.release, t.beta, 'Psyduck' AS author
FROM ft_tracks t
WHERE t.uid='4'
ORDER BY t.name ASC
)
UNION
(
SELECT t.tid, t.uid, t.name, t.envi, t.difficulty, t.release, t.beta, u.username AS author
FROM ft_tracks t
LEFT JOIN ft_users u ON t.uid=u.uid
WHERE u.username>'FunTrackers'
AND u.uid!='4'
ORDER BY u.username ASC, t.name ASC
)
) r
WHERE beta='0'
LIMIT 0,15
Das Problem:
Führe ich die Unterabfragen einzeln aus, funktioniert alles: Die Tracks sind richtig sortiert.
Sobald ich aber ein UNION mit reinbringe, wird die Sortierung anscheinend wieder über den Haufen geworfen, ein Autor mit "bo" erscheint auf einmal vor "Am" (und die Tracks ein und desselben Autors sind auch nicht mehr nach Trackname sortiert)
Ich hoffe das Problem wird soweit klar, und mir kann jemand helfen
MfG Zwoetzen