Forenansicht auf Version 4.024 portieren

tomkruse

Erfahrenes Mitglied
Hallo!

Ich bin gerade am Verzweifeln weil ich mein selbst programmiertes Forum auf einem Server installieren muß auf dem die prähistorische MySql-Version 4.024 läuft. Folgendes läuft zwar super unter MySQL 5.xx aber eben nicht unter 4.024:

SELECT isgweb_threads.id, title, (SELECT MAX(creationtime) FROM isgweb_threads AS trs WHERE trs.parentid=isgweb_threads.id) AS lastaction, (SELECT COUNT(*) FROM isgweb_threads AS trs2 WHERE trs2.parentid=isgweb_threads.id) -1 AS answers, isgweb_user.username, forumid FROM isgweb_threads, isgweb_user WHERE parentid=isgweb_threads.id AND isgweb_user.id=isgweb_threads.userid ORDER BY lastaction DESC LIMIT 0, 10

Ok, ist sicher nicht supereffizient programmiert (bin einfach kein DB-Profi) aber klappt unter aktuellen Versionen. Vermutlich liegts an den Selects in Klammer. Das kann die alte Version einfach nicht.

Daher habe ich mir folgendes überlegt:

SELECT isgweb_threads.id, title, count(*) -1 AS answers, MAX(creationtime) AS lastaction, username, isgweb_threads.forumid AS forumid FROM isgweb_threads, isgweb_user WHERE isgweb_threads.userid = isgweb_user.id GROUP BY parentid ORDER BY MAX(creationtime) DESC LIMIT 0, 10

(war schon ziemlich stolz auf mich, das als Nicht-DB-Profi überhaupt hingekriegt zu haben *g*)

Das sieht schon etwas schlanker aus und da sind keine Sub-Queries mehr drin. Naja, geht trotzdem nicht. "Invalid use of group-function".

Langsam bin ich am verzweifeln. Das Ganze sollte mir einfach nur die neuesten 10 Threads anzeigen, mehr nicht.

Die Tabelle ist ganz einfach aufgebaut:

id int
title varchar
content text
userid int
forumid int
parentid int
creationtime int

Anzumerken wäre noch, daß der jeweils erste Beitrag eines Threads parentid=id gesetzt hat. Das vereinfacht einfach die Anzeige des Threads selbst.

Über Hilfe von Leuten die sich mit DBs besser auskennen als ich wäre ich sehr glücklich :)

Irgendwie muß es ja gehen, denn es gab auch zu Zeiten von MySQL 4.024 bereits Foren ;)

viele Grüsse und danke im Voraus

Thomas.
 
Ok, hat wohl keiner gewußt. Aber mittlerweile ist das Problem gelöst und ich war eigentlich überrascht, wie nah ich dran war :)

SELECT isgweb_threads.id, title, count(*) -1 AS answers, MAX(creationtime) AS lastaction, username, isgweb_threads.forumid AS forumid FROM isgweb_threads, isgweb_user WHERE isgweb_threads.userid = isgweb_user.id GROUP BY parentid ORDER BY lastaction DESC LIMIT 0, 10

Also das einzige was nicht gepaßt hat war die Mischung von Group By und der Max-Funktion. Sobald man in Order By den gesetzten Alias für MAX(creationtime) verwendet läufts auf einmal anstandslos :)
 
Zurück