Seite 1 von 1

Ungelesene Beiträge anzeigen (statt seit dem letzten Besuch)

Verfasst: 28.05.2007 11:25
von Dr. Love
Hi,

ich bin gerade ein wenig erschüttert, dass es keine Möglichkeit gibt, sich alle ungelesenen Beiträge anzeigen zu lassen. Schön und gut, dass der gelesen-Status in der Datenbank abgelegt wird, aber wenn man dann danach nicht suchen kann, ist der Witz für mich weg. (In meinem alten Forum hatte ich den UPI2DB-Mod drin.)

Jetzt dient das ganze nur noch der farblichen Markierung der Foren und Threads. Oder habe ich was übersehen?

Bei einem schnellen Blick in ddie search.php bestätigte sich meine Beobachtung leider: Die SQL-Abfrage sucht tatsächlich nur nach den neuen Posts seit dem letzten Besuch und nicht nach ungelesenen Posts. Also muss wohl oder übel ein Mod her.

Gibt es so einen Mod schon? Sitzt schon jemand da dran? Ich werde mich in den nächsten Tagen wohl mal da dran setzen.

Eigentlich wollte ich mein neues Forum nicht modden, um die Updates sauber mitmachen zu können. Nun habe ich in der config.php gesehen, dass es offensichtlich so etwas wie eine Extension-Schnittstelle gibt. Gibt es da Informationen drüber? Ich habe bisher nichts dazu gefunden. Ließe sich vielleicht sogar dieser Mod als Extension realisieren? Das wär sehr fein.

Verfasst: 28.05.2007 13:33
von kazwo

Verfasst: 28.05.2007 13:45
von Michael Zacher
Nein, nein..
Er meint vom User ungelesene Beiträge.
Hier bei phpBB.de und auch so beim phpBB2 steht "Beiträge seit dem letzten Besuch anzeigen".
Dies ist aber beim Olympus nicht mehr der Fall.
Hier wird alles nur noch über die Grafiken gemacht.
Leider fällt mir dazu aber auch nix ein.

Verfasst: 28.05.2007 13:56
von Mahony
Hallo
Die Suche nach "Neue Beiträge" im phpBB3 entspricht der Suche nach "Beiträge seit dem letzten Besuch anzeigen" im phpBB2





Grüße: Mahony

Verfasst: 28.05.2007 16:04
von Dr. Love
Mahony hat geschrieben:Hallo
Die Suche nach "Neue Beiträge" im phpBB3 entspricht der Suche nach "Beiträge seit dem letzten Besuch anzeigen" im phpBB2
Genau so ist das. Etwas enttäuschend, da die Informationen über gelesene Beiträge ja schon in der Datenbank abgelegt werden, es aber keine Möglichkeit gibt, danach zu suchen.

Mit folgender Abfrage kann man immerhin eine Liste dieser Einträge anzeigen (bzw. mittels count(post_id) zählen):

Code: Alles auswählen

SELECT distinct post_id FROM (
  SELECT post_id, forum_id, topic_id, post_subject, post_time
  FROM phpbb3_posts
  WHERE post_time > (UNIX_TIMESTAMP() - 2592000)
) AS p
LEFT JOIN `phpbb3_forums_track` ft
  ON p.forum_id = ft.forum_id
LEFT JOIN `phpbb3_topics_track` tt
  ON p.topic_id = tt.topic_id 
WHERE (ft.user_id = ##USER_ID## AND p.post_time > ft.mark_time)
  OR (tt.user_id = ##USER_ID## AND p.post_time > tt.mark_time)
Keine Ahnung, ob die Abfrage irgendwelche Seiteneffekte hat, ich hab den halben Tag heute daran gebastelt (dass es für Foren und Posts zwei Track-Tabellen gibt, muss man erst mal checken) und mit meinen Testdaten funktioniert es erst mal.

Beachten:
- Funktioniert nicht mit MySQL 3.23, da hier die nötigen Subselects nicht unterstützt werden.
- Das distinct sorgt dafür, dass jeder Post nur einmal zählt (nötig wegen des zweifachen JOINs)
- Die 2592000 steht für die letzten 30 Tage (in Sekunden).Wenn man zu lange suchen lässt, dauert die Abfrage unerträglich lange. Bei mir in 27000 Posts der letzten sechs Jahre etwa 6-7 Sekunden, so nur noch 0,1-0,2 Sekunden. Immer noch etwas lang für meinen Geschmack.
- Die Subquery kann man sich auch sparen, aber das wär eine bemerkenswerte Ressourcenverschwendung, da die JOINS sonst wirklich viel Arbeit hätten (bei mit etwa 10-fache Verarbeitungszeit nötig).


Irgendwelche Kommentare?