[SQL] group by + joins -> sortierungsproblem

  • folgendes db konstrukt:

    tabelle categorien: id,name,benutzerlevel
    tabelle forum: id,cat_id,name
    tabelle topics: id,forum_id,name,user_id,erstellzeit
    tabelle posts: id,topic_id,user_id,erstellzeit

    die eben über die jeweiligen ids miteinander verknüpft werden sollen.

    wenn ich jetzt die forenübersicht erstellen möchte soll das in etwa so aussehen:

    Code
    ---------------------------------------------------------
    | categoriename                                         |
    ---------------------------------------------------------
    |  | name des forums     | beitragszähler | letzter post|
    ---------------------------------------------------------
    |  | name des forums     | beitragszähler | letzter post|
    ---------------------------------------------------------

    bis dahin kein problem

    mittlerweile habe ich zwei themen erstellen zum besseren erklären:

    Code
    mysql> SELECT t.name,p.time FROM board_posts AS p INNER JOIN board_topics AS t ON p.topic_id = t.id ORDER BY time DESC;
    +-----------+------------+
    | name      | time       |
    +-----------+------------+
    | test2     | 1240328328 |
    | testthema | 1240323773 |
    +-----------+------------+
    2 rows in set (0.00 sec)

    ich möchte auf meiner übersichtssseite ja in dem großen query immer nur das letzte thema haben, daher musst ich da ja noch ein group by anhängen!

    das problem jetzt, wenn ich das so ausführe bekomme ich nicht das test2 als letzten beitrag zurück, sondern testthema, was ja aber so nicht stimmt.

    sprich ich müsste jetzt ja irgendwie vor dem group by forum.id noch irgendwie sortieren, dass ich den jünsten beitrag bekomme?
    mit nem order by oder nem where lässt sich das ja aber nicht bewerkstelligen.
    die einzige idee die ich hätte wäre einen subquery einzubauen, aber das ist ja nicht sonderlich performant und irgendwie auch nicht sonderlich elegant.

  • Hmm probier mal

    SELECT
    categorie.name as cat,forum.name,forum.id,topics.name,posts.
    (select time FROM board_posts WHERE board_posts.topic_id = topics.id ORDER BY `time` DESC LIMIT 1)

  • so problem gelöst, aufgrund von performancesachen und der komplexität mit subquerys die arsch langsam werden....
    ich hab ne dopplung in kauf genommen und damit den allgemein dbload noch verringern können ;)

    und es arbeitet auch.
    bewundert werden kanns hier:

    Siginfo » SIB

    allerdings kann man bis dato nur in ein thread reinposten, da ich möglichkeiten zur threaderöffnung noch nicht implementiert hab :D
    aber das grundding steht ;)

Jetzt mitmachen!

Du hast noch kein Benutzerkonto auf unserer Seite? Registriere dich kostenlos und nimm an unserer Community teil!