INNER JOIN + Zählen

Urba

Grünschnabel
Hallo Leute,

Ich arbeite momentan an folgendem Problem, allerdings komme ich ehrlichgesagt zu keiner Lösung.

Ich habe 3 Tabellen :

DBUser : ID,Name,Vorname
DBAntworten : AAntwortID,AUserID
DBTopics : TTopicID, TUserID

Es handelt sich hierbei um ein Forum, dass ich schreibe. In DBAntworten wird eingetragen, wenn ein User eine neue Antwort gesendet hat und in DBTopics wenn er ein neues Thema eröffnet hat.

Nun möchte ich die Anzahl der Beiträge eines Users ermitteln. Dies soll in einer SQL-Abfrage stattfinden. Ich habe es bereits hinbekommen, dass ich die Anzahlen der Antworten ermittelt bekomme :

SELECT
DBUser.Name,
COUNT(DBAntworten.AAntwortID)

FROM
DBUser
INNER JOIN DBAntworten
ON DBAntworten.AUserID = DBUser.ID

GROUP BY DBAntworten.AUserID

erhalte ich den User mitsamt den bisher erstellten Antworten. Nun besteht allerdings das Problem, dass ich keine Ahnung habe wie ich in derselben Abfrage auch noch das mit den Topics hinbekommen soll. Die Gesamtanzahl der Beiträge = Antworten + Topics. Von daher brauche ich beide.

Hat jemand von euch irgendeine Ahnung wie ich das machen soll ? Ich weiss zwar dass ich erneut einen INNER JOIN brauche, allerdings weiss ich 1.) nicht so wirklich wie ich den noch einbauen soll und 2.) weiss ich nicht wie das mit dem COUNT dann funktionieren sollte.

Würde mich freuen Antwort von euch zu erhalten.
Gruss
Urba
 
Hi,

TIPP:

Mach das bloß nicht so! Da wirst du fiese Performance Probleme bekommen. Statt dessen erstell eine Spalte bei den User in der du die Post zählst. D.h. bei jedem Post vom User, erhöhst du nur diese eine Spalte um eins.

Mit den Topics würd, bzw. hab, ich das gleiche gemacht.
 
Hallo,

Natürlich habe ich das nun auch so gemacht. Aber nur so nebenbei : Man sollte es eigentlich nicht so machen. Performance geht dabei kaum verloren, allerdings geht man Risiken von Datenverlusten ein, denn wenn beim Updaten dieser Beiträge mal was schief geht ist es etwas blöd. Natürlich sind das hier keine hochwertigen und hochkomplizierten Datenbanken aber man sollte schon versuchen gar nichts vergleichbares in eine fremde Tabelle zu schreiben. (Heisst das nicht "Normalisierung") - Ich bin normalerweise auch kein Verfechter solcher theoretischen Informatikersachen, aber manchmal stimmt es eben schon :-P

Wie gesagt ich habe es nun auch so gemacht, da mir keine Lösung eingefallen ist.

Danke trotzdem

Gruss
Urba
 
>> Performance geht dabei kaum verloren
Dem kann ich nun überhaupt nicht zu stimmen.

Nehmen wir mal an Du hast so 20.000 Member in deinem Forum und so 200.000 Beiträge. Dann müßtest du bei z.B. einer User Top10, bei jedem User das gesamte Forum nach diesem User (ID) durchsuchen um die Anzahl seiner Beiträge anzuzeigen. Das gleiche beim Topic.

Wenn das nicht performance lastig ist? Was dann?

Ich hab dieses Forum: http://www.flashhilfe.de/forum.html selbst geschrieben und habe dort verschiedenste Varianten versucht. Am Anfang hatte ich es so wie du es haben möchtest. Aber nach ca. 50.000 Nachrichten machte sich doch ein spürbarer Performance Verlust bemerkbar. -ja, index´e ;) sind angelegt.

Vielleicht gibts noch andere Lösung. Aber mir ist keine bessere bekannt.

>> allerdings geht man Risiken von Datenverlusten ein, denn wenn beim Updaten dieser Beiträge mal was schief geht ist es etwas blöd.
Was spricht dagegen ein Script zu erstellen das diese Daten aktualisiert?
 
Zuletzt bearbeitet:
Ich weiss nicht wie komisch das klingt, aber das habe ich auch gesagt. Wir hatten das in Informatik und ich sagte auch dass es sehr performanceschwächend ist. Er entgegnete, dass ich zu alghoritmisch denken würde, denn die Datenbanken seien auf sowas ausgelegt. Wie sieht aber mal wieder der praktische Beweis aus : Alghoritmischen Denken ist besser :-)))

Danke für diese "Einblicke" und ich werde es mir sicherlich merken
 
Hehe.... verdammt, wie schnell bist du den?

Muß grad mit nem Modem surfen, sende, sehe dann das ich noch was ändern muß in meinem Beitrag. Änder, klicke auf senden und dann steht da schon ne Antwort von dir....
 
Zurück