rabby: MySQL mit spezieller Sortierung

hallo welt!
In meiner Tabelle speichere ich unter anderem Aufnahme-Datum(Timestamp) eines Newstextes und dessen Bezugsthema.
Nun ist erwünscht, dass als erstes immer nur die 2 aktuellsten News eines Themas angezeigt werden; und danach erst die übrigen (veralteten) News der Themen.
also nochmal zusammengefasst, wie die sortierung aussehen soll.
1.)nach werden mal unrelevante Einträge ausgeschlossen durch MATCH AGAINST
2.)Sortierung nach Themenbereichen
3.)Sortierung, sodass jeweils die 2 aktuellsten Einträge eines Themas als erstes angezeigt werden
4.)Anordnung der restlichen Ergebnisse am Ende unter Beachtung deren chronoligischer Eintragung

Natürlich wäre es mir lieber, das ganze durch mein PHP Script erledigen zu lassen; jedoch sind die Ergebnisse auf mehrere Seiten verteilt zu jeweils 100 Treffern, weshalb es wohl weniger sinnvoll wäre, alle possiblen Treffer durchzuarbeiten, um sie zu sortieren, obwohl von vornherein feststeht, dass nur 100 davon benötigt werden.

Vielen Dank für Tipps und Eure Hilfe

  1. yo Mond,

    wir reden von mysql und welcher version ? willst du in einer abfrge nur datensätze zu einem bestimmten thema und von denen die top 2 aktuellesten ganz oben oder aber alle mit einer abfrage erfassen und jeweils die top 2 eines themas ?

    Ilja

    1. hallo!
      es handelt sich um MySQL 4.0.24 und dass problem ist, dass -wenn möglich- alles durch eine einzige abfrage ermittelt werden soll, da ansonsten wieder die aufteilung der ergebnisse auf mehrere seiten mit dem zweck, nicht alle treffer durchsehen zu müssen, wieder sinnlos...
      danke für tipps

      1. yo,

        danke für tipps

        nun ja, bis jetzt war ja noch kein sinnvollen tipps dabei. spontan würde ich aber sagen, dass man die abfrage in zwei teile gliedern kann, wenn ich dich richtig verstanden habe. beide abfragen würde ich durch Union verbinden. die datensätze, die durch MATCH..AGAINST ausgeschlossen werden, die lass ich der einfachheit halber weg. berücksichtigt wird nicht, wenn nachrichten den gleichen timestamp haben, was eventuell auch nicht wichtig ist.

        die erste abfrage ermittelt die top 2 jedes themas. dazu kann man eine unterabfrage mit einbauen, die sich auf die obere abfrage bezieht. da ist dann aber schon das problem, weil mysql diese erst mit 4.1 unterstützt. die frage ist, ob du sie updaten kannst oder das nicht geht.
        die zweite abfrage liefert alle datensätze nach zeit sortiert, die nicht in ersten abfrage vorkommen.

        SELECT tab1.id, tab1.thema, tab1.datum
        FROM tabelle AS tab1
        WHERE tab1.id IN
           (
            SELECT tab2.id
            FROM tabelle AS tab2
            WHERE tab2.thema = tab1.thema
            ORDER BY tab2.datum DESC
            LIMIT 0,2
           )
        ORDER BY tab1.thema, tab1.datum

        UNION

        SELECT tab3.id, tab3.thema, tab3.datum
        FROM tabelle AS tab3
        ORDER BY tab3.datum

        ich bin mir aber nicht sicher, ob ich deine gewünschte sortierung richtig verstanden habe und auch nicht, ob die abfrage fehler ausgibt. falls du nicht auf 4.1 updaten kannst, muss man sich für den ersten teil etwas anderes überlegen....

        Ilja