kostenloser Webspace werbefrei: lima-city


SQL: ORDER BY vor GROUP BY

lima-cityForumProgrammiersprachenPHP, MySQL & .htaccess

  1. Autor dieses Themas

    blackpanther-online

    blackpanther-online hat kostenlosen Webspace.

    Hallo,

    ich stehe vor einem SQL-Problem. Ich möchte aus einer Tabelle, die die Beiträge im Forum speichert die letzten Beiträge herausfiltern. Dazu brauche ich nur die Tabelle 'posts' die folgende Zellen (sowie drei Beispieldatensätze) enthält:

    thread_id | post_id | time
    ================================
    1 ............ | 1 ......... | 0610271200
    2 ............ | 1 ......... | 0610271315
    1 ............ | 2 ......... | 0610281600

    Meine SQL-Anweisung sieht bisher folgendermaßen aus:

    SELECT *
    FROM posts
    ORDER BY time DESC
    LIMIT 7

    Die Anweisung liefert mir die 7 letzten Beiträge. wie man in der Tabelle sieht, sind allerdings Datensatz 1 und 3 im selben Thema. Daher macht es ja keinen Sinn den doppelt auszugeben. Ausdem Grund habe ich in meine SQL-Anwesung 'GROUP BY thread_id' eingefügt. Dieses hat allerdings zur folge das Datensatz 1 angezeigt wird und nicht der neure Datensatz 3. Im Prinzip müsste ich zuerst die 'ORDER BY time DESC' auisführen und danach die Rückgabe gruppieren. Doch setzte ich ORDER BY vor GROUP BY crasht die Anwesiung mit nem Fehler. Wie kann ich es alternativ lösen?

    Vielen Dank schonmal.

    MfG
    Panther

    Beitrag geändert: 28.10.2006 18:06:53 von blackpanther-online



    -----------------

    Hallo, ich habe die Lösung selber herausgefunden:

    SELECT `thread_id` , MAX( `post_id` )
    FROM `posts`
    GROUP BY `thread_id`
    ORDER BY `time`
    LIMIT 7

    Beitrag geändert: 29.10.2006 8:54:02 von blackpanther-online
  2. Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!

    lima-city: Gratis werbefreier Webspace für deine eigene Homepage

  3. e**o

    hmm dein problem hat mich 20min hirn gekostet :D
    Habe aber doch eine passable lösung gefundne:

    SELECT * FROM mytable WHERE zeit IN (SELECT max(zeit) FROM mytable AS X WHERE X.thread_id=mytable.thread_id)

    Diese Abfrage liefert dir für jeden Thread den letzten beitrag. Ich glaube das du das wolltest

    SELECT * FROM mytable WHERE zeit IN (SELECT max(zeit) FROM mytable AS X WHERE X.thread_id=mytable.thread_id) ORDER BY zeit DESC LIMIT 7

    zeigt jetzt nurmehr die 7 thread wo die letzten anworten unter den neuersten sind.
    sie selbst


    bei probs schick mir PN

    mfg
  4. Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!

    lima-city: Gratis werbefreier Webspace für deine eigene Homepage

Dir gefällt dieses Thema?

Über lima-city

Login zum Webhosting ohne Werbung!