aufgrund eines kleinen Malheurs habe ich mich bisschen damit beschäftigt, wie Ilch die Anzahl der Foren-Posts eines Benutzers ermittelt bzw. speichert und habe nun paar Fragen, die ich hier loswerden möchte.
Kurz zur Vorgeschichte:
Vermutlich wurden die Foren-Kategorien versehentlich gelöscht. Damit verbunden war, dass das Forum komplett gelöscht war. Das partielle (:D) Einspielen eines Datenbank-Backups machte diesen Fauxpas rückgängig.
Das Backup war (leider) nicht aktuell genug und so gingen zwei Foren-Posts verloren (tägliches Backup). Mir ist dann aufgefallen, dass die Anzahl der Posts des Benutzers dennoch unverändert geblieben ist (obwohl nachweislich zwei Posts weniger). Soweit ich weiß waren die Posts aller Nutzer auch nicht auf 0, obwohl das Forum komplett gelöscht wurde.
Die Anzahl der Beiträge eines Benutzer werden in der Tabelle "prefix_user" in der Spalte "posts" abgelegt und vermutlich beim Erstellen eines Posts inkrementiert bzw. beim Löschen eines Posts dekrementiert. Das habe ich jetzt nicht im Code überprüft, sondern einfach ausprobiert.
In der user_details.php und memb_list.php (include\contents\user\) wird dann unter anderem die oben genannte Spalte abgefragt, sowie im Falle von user_details.php noch die Posts pro Tag berechnet.
user_details.php
... $abf = 'SELECT * FROM prefix_user WHERE id = "'.$uid.'"'; $erg = db_query($abf); ... $regsek = mktime ( 0,0,0, date('m'), date('d'), date('Y') ) - $row['regist']; $regday = round($regsek / 86400); $postpday = ( $regday == 0 ? 0 : round($row['posts'] / $regday, 2 ) ); ...
memb_list.php: Zeile 44-53
In der Tabelle "prefix_posts" werden sämtliche Forenbeiträge abgelegt. Diesen Forenbeiträgen kann natürlich auch ein Benutzer zugeordnet werden (Spalte "erstid").
Jetzt frage ich mich wieso überhaupt die Anzahl der Posts als "prefix_user"."posts" abgelegt wird?
Es wäre ja auch möglich mit z.B. folgender Abfrage zu ermitteln, wie viele Posts ein Benutzer erstellt hat:
SELECT count(*) FROM prefix_posts WHERE erstid=1;
dev.mysql.com/doc/refman/5.1/de/counting-rows.html
So wäre vielleicht die Spalte "posts" in "prefix_user" komplett überflüssig, sowie Code zum Inkrementieren und Dekrementieren der Anzahl an Posts.
Wenn in der Tabelle "prefix_user" in der Spalte "posts" wirklich nur die Anzahl der Forenbeiträge hinterlegt sind, müsste man auch nicht dutzende Tabellen abfragen und dann zusammenrechnen, wie viele Posts ein Benutzer hat. Die eine SQL-Abfrage mit dem "count(*)" würde reichen.
Oder gab es da bedenken betreffend der Performance bei größeren Datenbanken?
stackoverflow.com/questions/6069237/fastest-way-to-count-exact-number-of-rows-in-a-very-large-table
Ich habe jetzt nicht ausprobiert ob das unterm Strich Code-Zeilen und Komplexität reduzieren würde oder keinen negativen Effekt auf die Performance hat.
Wie das in Ilch 2.0 ist, habe ich auch nicht nachgeschaut.
Grüße
blackcoder
verwendete ilch Version: 1.1 P
Zuletzt modifiziert von blackcoder am 11.10.2014 - 16:33:04