Komplexe (?) Abfrage

UdoZZ

Neuer Benutzer
Beiträge
2
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
 
Werbung:

thomas_w

Datenbank-Guru
Beiträge
104
AW: Komplexe (?) Abfrage

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.

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
 
Werbung:

UdoZZ

Neuer Benutzer
Beiträge
2
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
 
Oben