PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Beiträge eines Forums zählen?


c4
15.11.2003, 16:01:00
Moin,

bin mal wieder am Basteln eines kleinen Forums. Auf der Startseite soll die Zahl der Beiträge in jedem Forum angezeigt werden sollen.
Erstmal die Tabelle:
CREATE TABLE IF NOT EXISTS forum (
id INT AUTO_INCREMENT PRIMARY KEY,
pid INT NOT NULL,
hits INT NOT NULL,
subject VARCHAR(200) DEFAULT '',
content TEXT NOT NULL DEFAULT '',
user VARCHAR(50) DEFAULT '',
email VARCHAR(100) DEFAULT '',
timestamp INT DEFAULT '0',
ip VARCHAR(15) DEFAULT '',
showemail CHAR(1) DEFAULT '1',
sendemail CHAR(1) DEFAULT '0'
);
Was bei SelfPHP z.B. 'Grundlagen' oder 'Off-Topic' ist, das hat bei mir die pid (parent id) 0. Alle neuen Beiträge werden dann mit dieser pid zugeordnet.

Gibt es eine ordentliche Methode, um die Zahl der Beiträge jedes Forums (alle Einträge, die sich auf einen Eintrag mit pid==0 beziehen) zu ermitteln? Schleifen & Co. entfallen, denn das würde zu langsam werden.
Das selbe Problem besteht auch bei den Hits: Wie zeige ich auf der Startseite an, wie oft in jedem Forum rumgeklickt wurde?


Besten Dank,
Carsten

Gweilo
15.11.2003, 17:05:39
Hi C4,

Die hits kannst du mit mySQL zusammenzählen:
SELECT SUM( hits )
FROM forum
WHERE pid=30

Die anzahl Posts pro Unterforum kannst du so etwa zählen:
SELECT COUNT(*)
FROM forum
WHERE pid=30

Das war doch, wonach du gesucht hast, oder hab ich Dich da misverstanden?

Gweilo

c4
15.11.2003, 18:13:50
Jap, leider falsch 'verstanden'.

Der Inhalt sieht ungefähr so aus:ID PID hits bla
33 0 14 lalalala
34 33 7 lalalala
35 34 0 lalalala
36 34 0 lalalala
37 33 9 lalalala
38 37 0 lalalala
39 37 0 lalalala - ID 33 ist ein Hauptforum (wie in dem Board MySQL oder Off-Topic)
- ID 34 ist ein Thread in dem Unterforum 33
- 35 und 36 sind Beiträge im Thread 34 (darum auch 0 Hits)

Nun würde ich gerne wissen, wie viele Hits in Forum 33 getätigt wurden und wie viele Beiträge sich darin insgesamt befinden.

overclocker
15.11.2003, 18:59:35
mal schauen ob ich's 'verstanden' hab ;)

SELECT SUM(hits) AS hitz, COUNT(id) AS posts FROM forum WHERE pid=33

c4
15.11.2003, 19:10:08
Naja, da fehlt aber noch was, Übertakter.

Wenn ich das in der obersten Ebene (praktisch ID==0) mache, dann stimmt die Anzahl doch nicht. Dann fehlen Beitrag 38 und 39, da diese sich auf 37 beziehen und anscheinend nichts mit 33 zu tun haben.
Das war es, was ich am Anfang meinte, dass man das in einer Schleife abfragen könnte, was ich aber nicht will.

Gweilo
15.11.2003, 19:43:42
Ahso, jetz hab ich's verstanden (glaube ich zumindest)

Ist's möglich innerhalb eines Querys ein zweites Query zu starten? Ansonsten sähe ich da keine andere möglichkeit als durchzuschleifen.

Wie unterscheidest du eigentlich zwischen Forum und Thread? Bloss durch die 0 in PID? Ich weiss nicht. ich würde da ehrlich gesagt mehrere Tabellen machen, finde das nicht so toll, alles in einer Tabelle zu halten.

c4
15.11.2003, 20:20:32
Ist's möglich innerhalb eines Querys ein zweites Query zu starten? Ansonsten sähe ich da keine andere möglichkeit als durchzuschleifen. Doch, mySQL 4 kann das (angeblich). Schimpft sich SubSELECT. Jetzt wo Du es sagst (ich sollte ausschlafen): Ich hab mySQL 4 und mein Provider auch. Also steht dem nix im Weg, außer meiner Unlust.

ich würde da ehrlich gesagt mehrere Tabellen machen, finde das nicht so toll, alles in einer Tabelle zu halten. Jau, gehört sich auch so. Ich hatte bloß keine Lust dazu. :)


Ich werde mich dann mal an SubSELECTs versuchen. Aber nicht mehr heute....

c4
27.11.2003, 18:32:30
Des Lösungs Problem: Forum neu schreiben. :)
--> http://dbCF.de/t-forum/
Mehr Tabellen und mehr durchdacht.