Autor Beitrag
BenBE
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 8721
Erhaltene Danke: 191

Win95, Win98SE, Win2K, WinXP
D1S, D3S, D4S, D5E, D6E, D7E, D9PE, D10E, D12P, DXEP, L0.9\FPC2.0
BeitragVerfasst: Fr 11.08.06 19:16 
Hi, für ein Forum schreibe ich derzeit an einem kleinen Statistik-Skript und dabei wollte ich gern eine Abfrage drin haben, die mir liefert, welche User über den Zeitraum einer Woche die meisten Beiträge geschrieben haben. Meine bisherige Abfrage dafür sieht so aus:

ausblenden SQL-Anweisung
1:
2:
3:
4:
5:
6:
7:
8:
9:
SELECT DISTINCT p1.poster_id, MAX( p2.post_time ) AS max_post_time, COUNT( p2.poster_id ) AS user_posts
FROM phpbb_posts AS p1
INNER JOIN phpbb_posts AS p2 ON ( p1.poster_id = p2.poster_id
AND p1.poster_id <> -1
AND p2.poster_id <> -1
AND p2.post_time - p1.post_time > -7 *86400
AND p2.post_time - p1.post_time <=0 )
GROUP BY p1.post_id
ORDER BY user_posts DESC


Die zurückgegebenen Daten klingen zwar plausibel, jedoch gibt es zwei wesentliche Probleme:
1. Die Abfrage benötigt knapp 5 Minuten und legt während dieser Zeit den Webserver incl. Forum nahezu lahm ...
2. Die Abfrage liefert für jedes Posting den Stand der Postings die der zugehörige User im besagten Zeitraum vor diesem Posting verfasst hat

Zur Dimension:
ca. 30 User bei ~23000 Postings (User relativ konstant, Postingzahl stark wachsend)

Was ich bräuchte:
1. eine Optimierung, dass diese Abfrage in <30 Sekunden geht (obwohl PHP die Ausführungszeit für Abfragen nicht mit einrechnet)
2. eine Erweiterung der Abfrage, dass ich für jeden User nur jeweils das Maximum (ersten Datensatz für jede UID) bekomme.

Was zu vermeiden ist:
1. Stored Procedures
2. Temporäre Tabellen

TIA.

_________________
Anyone who is capable of being elected president should on no account be allowed to do the job.
Ich code EdgeMonkey - In dubio pro Setting.
BenBE Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 8721
Erhaltene Danke: 191

Win95, Win98SE, Win2K, WinXP
D1S, D3S, D4S, D5E, D6E, D7E, D9PE, D10E, D12P, DXEP, L0.9\FPC2.0
BeitragVerfasst: Mi 28.01.09 19:28 
Hat jemand für dieses Problem eine Lösung ??? Bräuchte solch eine Abfrage nämlich für eine ganze Reihe von Projekten, nicht nur für das angesprochene Forum.

_________________
Anyone who is capable of being elected president should on no account be allowed to do the job.
Ich code EdgeMonkey - In dubio pro Setting.