1. Diese Seite verwendet Cookies. Wenn du dich weiterhin auf dieser Seite aufhältst, akzeptierst du unseren Einsatz von Cookies. Weitere Informationen
  2. Willkommen im Forum für alle Datenbanken! Registriere Dich kostenlos und diskutiere über DBs wie Mysql, Oracle, Sql-Server, Postgres, Access uvm
    Information ausblenden

Komplexe (?) Abfrage

Dieses Thema im Forum "MySQL und MariaDB" wurde erstellt von UdoZZ, 13 November 2010.

  1. UdoZZ

    UdoZZ Neuer Benutzer

    Moin,

    gegeben ist folgende (vereinfachte) Datenstruktur, die Informationen über die Nutzung eines Forums enthält.

    Beitrag___Thema___Aufrufe__Datum___Name___Text
    -------------------------------------------------------------
    1________1....
    2________1....
    --------------------------------------------------------
    3________2_______12______1.1.10___aa______www
    4________2_______7_______1.1.10___bb______rrr
    5________2_______2_______2.1.10___aa______xyz
    6________2_______23______3.1.10___cc______zui
    -------------------------------------------------------------
    7________3....
    8________3....

    Beitrag: Index, ein einzelner Beitrag im Forum
    Thema: Thema, zu dem der Beitrag gehört
    Aufruf: Lesezugriffe auf den Beitrag
    Datum: Erstellungsdatum des Beitrages
    Name: Beitragersteller
    Text: Text des Beitrags

    Ich möchte jetzt eine Übersicht der Themen erstellen, die je Thema folgende Informationen enthält:
    - Anzahl der Beiträge
    - Anzahl der Aufrufe
    - Datum des 1. Beitrages
    - Datum des letzten Beitrages
    - Name des 1. Beitragerstellers
    - Name des letzten Beitragerstellers

    Die meisten Daten hole ich mir bisher über SELECT...GROUP BY:
    SELECT COUNT(Beitrag) AS beitraege, SUM(Aufruf) AS aufrufe, Datum AS datum1, MAX(Datum) AS datum2, Name AS name1
    FROM tblforum
    GROUP BY Thema

    Nur, wie komme ich möglichst effizient an den letzten Namen und den letzten Text?

    Es geht um eine Datenbank mit 500.000 Beiträgen, pro Beitrag ca. 20 Einzeldaten in der Tabelle, 1 bis 100 Beiträge pro Thema.


    Danke und Gruß,
    Udo
     
  2. thomas_w

    thomas_w Datenbank-Guru

    AW: Komplexe (?) Abfrage

    Brauchst Du Hilfe bei den SQL-Abfragen oder eher beim Performance Tuning?

    Kannst Du zu den SQL-Afragen die Tabellenstrukturen (CREATE TABLE..) und ein paar Testdaten (INSERT ... ) liefern, dann läßt es sich einfacher testen.

    Bitte [ code ] [ /code] Tage verwenden (siehe Toolbar oben). Z. B. so

    Code:
    SELECT COUNT(Beitrag) AS beitraege, SUM(Aufruf) AS aufrufe, 
               Datum AS datum1, MAX(Datum) AS datum2, Name AS name1 
       FROM tblforum
    GROUP BY Thema
    
    Grüße
    Thomas
     
  3. UdoZZ

    UdoZZ Neuer Benutzer

    AW: Komplexe (?) Abfrage

    Moin,

    danke für die Antwort.
    Eigentlich wären es beide Punkte gewesen, weil sie sich irgendwie ja bedingen. Das Problem ist mittlerweile hinreichend gelöst; ich brauche jetzt für 500.000 Datensätze knapp 200 Sekunden, was schnell genug ist.

    Ich hatte einfach zu kompliziert gedacht. Gelöst habe ich das Problem mit ein paar Hilfstabellen: für die erste Tabelle habe ich zunächst ASC nach Beitrag sortiert dann über Thema gruppiert, für die zweite DESC. Damit hatte ich den 1. und letzten Beitrag jeweils in einer Tabelle.
    Die beiden Tabellen habe ich dann über das Thema zusammengefügt. Vereinfachte Abfragen:

    INSERT INTO tmp_1
    SELECT thema, name1, zeit1
    FROM (SELECT * FROM daten ORDER BY id ASC) AS tmp
    GROUP BY tid

    INSERT INTO tmp_2
    SELECT thema, name2, zeit2
    FROM (SELECT * FROM daten ORDER BY id DESC) AS tmp
    GROUP BY tid

    INSERT INTO final
    SELECT tmp_1 .thema, tmp_1 .name1, tmp_1 .zeit1, tmp_2 .name2, tmp_2 .zeit2
    FROM tmp_1, tmp_2
    WHERE tmp_1 .thema=tmp_2 .thema


    Gruß, Udo
     
Die Seite wird geladen...

Diese Seite empfehlen