Div. Listenabfragen (Lastposts, Nulltopics, watched topics)

Fragen zu allen Themen rund ums Programmieren außerhalb von phpBB können hier gestellt werden - auch zu anderen Programmiersprachen oder Software wie Webservern und Editoren.
Antworten
Benutzeravatar
mgutt
Mitglied
Beiträge: 2999
Registriert: 31.08.2004 16:44
Wohnort: Hennef
Kontaktdaten:

Div. Listenabfragen (Lastposts, Nulltopics, watched topics)

Beitrag von mgutt »

Ich wollte auf die Profilseiten der User mehr Links bringen bzw. mehr Infos für andere User oder den User selbst.

In Zukunft würde ich dann z.B. beobachtete Beiträge nur für den eigenen User darstellen User lassen oder Admin/Mods etc.

Aber erstmal ein Beispiel:
http://www.maxrev.de/mgutt-u2.htm

Jetzt habe ich diverse Abfragen erstellt für jede einzelne Liste:

recent posts:

Code: Alles auswählen

SELECT DISTINCT t.* FROM phpbb_topics t, phpbb_forums f , phpbb_posts p WHERE f.forum_id = t.forum_id AND (f.forum_order BETWEEN 0 AND 3060) AND f.forum_id NOT IN(*ausgeschlossene_foren*) AND t.topic_id = p.topic_id AND p.poster_id = 2 ORDER BY t.topic_last_time DESC LIMIT 10
recent created topics:

Code: Alles auswählen

SELECT t.* FROM phpbb_topics t, phpbb_forums f WHERE f.forum_id = t.forum_id AND (f.forum_order BETWEEN 0 AND 3060) AND f.forum_id NOT IN(*ausgeschlossene_foren*) AND t.topic_poster = 2 ORDER BY t.topic_last_time DESC LIMIT 10
Diese beiden recents sind eigentlich falsch, denn Sie berücksichtigen nicht die Zeit als der User gepostet hatte, sondern wann die neueste Antwort in einem Topic wo er mal gepostet hatte abgegeben wurde.


watched topics by this user: (wir der Privatsphäre wegen nur für den User selbst in Zukunft geben)

Code: Alles auswählen

SELECT t.* FROM phpbb_topics t, phpbb_forums f , phpbb_topics_watch tw WHERE f.forum_id = t.forum_id AND (f.forum_order BETWEEN 0 AND 3060) AND f.forum_id NOT IN(*ausgeschlossene_foren*) AND tw.topic_id = t.topic_id AND tw.user_id = 2 ORDER BY t.topic_last_time DESC LIMIT 10
unanswered topics by this user:

Code: Alles auswählen

SELECT t.* FROM phpbb_topics t, phpbb_forums f WHERE f.forum_id = t.forum_id AND (f.forum_order BETWEEN 0 AND 3060) AND f.forum_id NOT IN(*ausgeschlossene_foren*) AND t.topic_poster = 2 AND t.topic_replies = 0 AND t.topic_moved_id = 0 ORDER BY t.topic_time DESC LIMIT 10

Jetzt möchte ich noch Listen erstellen für folgendes:
1. Topics in denen der User die meisten Antworten verfasst hat / am aktivsten war (absteigend) -> bekomme ich überhaupt nicht hin.. was mit GROUP BY?!
2. Topics, die der User als letztes gelesen (angeklickt) hat -> Hier gibt es doch einen Mod zu, soweit ich mich erinnere?!
3. die 10 letzten Bilder, die der User hochgeladen hat (bekomme ich selber hin)
4. die 10 letzten Videos, die der User hochgeladen hat (bekomme ich selber hin)
5. ... jemand eine Idee? Die besten Ideen wollte ich dann filtern ...

(Übrigens mache ich das, weil die Profile unheimlich gut in der Suchmaschine stehen und sonst nicht viele Links auf der Seite zu finden sind.)

Besonders Punkt 1 macht mir im Moment Kopf zerbrechen.

Gruß
meine Foren: http://www.maxrev.de/communities.htm
Ich kaufe Dein Forum! Angebote bitte an marc at gutt punkt it
Jojoponn139
Mitglied
Beiträge: 133
Registriert: 05.08.2006 01:20
Wohnort: Berlin
Kontaktdaten:

Beitrag von Jojoponn139 »

Hab ich das richtig verstanden, dass du eine MOD erstellen willst; die kompletten Änderungen aber als Anleitung haben willst?

...naja...
Benutzeravatar
mgutt
Mitglied
Beiträge: 2999
Registriert: 31.08.2004 16:44
Wohnort: Hennef
Kontaktdaten:

Beitrag von mgutt »

es geht nur um die sql-abfrage :roll:
meine Foren: http://www.maxrev.de/communities.htm
Ich kaufe Dein Forum! Angebote bitte an marc at gutt punkt it
Benutzeravatar
Pyramide
Ehrenadmin
Beiträge: 12734
Registriert: 19.04.2001 02:00
Wohnort: Meschede

Re: Div. Listenabfragen (Lastposts, Nulltopics, watched topi

Beitrag von Pyramide »

mgutt hat geschrieben:Diese beiden recents sind eigentlich falsch, denn Sie berücksichtigen nicht die Zeit als der User gepostet hatte, sondern wann die neueste Antwort in einem Topic wo er mal gepostet hatte abgegeben wurde.
Dann solltest du nach posts.post_time sortieren (und bei den erstellten Themen einen join auf topics.topic_first_post_id=posts.post_id machen)
mgutt hat geschrieben:Jetzt möchte ich noch Listen erstellen für folgendes:
1. Topics in denen der User die meisten Antworten verfasst hat / am aktivsten war (absteigend) -> bekomme ich überhaupt nicht hin.. was mit GROUP BY?!

Code: Alles auswählen

SELECT topic_id, count(post_id) AS post_count
FROM phpbb_posts
WHERE poster_id=<userid>
GROUP BY topic_id
ORDER BY post_count DESC
mgutt hat geschrieben:2. Topics, die der User als letztes gelesen (angeklickt) hat -> Hier gibt es doch einen Mod zu, soweit ich mich erinnere?!
AFAIK gibt es einen "unread post information to database mod". Da ich dessen Tabellen nicht kenne, kann ich dir zum query aber nichts sagen. Sieht warscheinlich so ähnlich aus wie der für die beobachteten Themen.
mgutt hat geschrieben:5. ... jemand eine Idee? Die besten Ideen wollte ich dann filtern ...
Die 5 dümmsten / intelligentesten Beiträge? :o
KB:knigge
Antworten

Zurück zu „Coding & Technik“