Seite 1 von 1

[Erledigt] SQL Letzte Beitragsseite finden

Verfasst: 08.01.2007 21:03
von bgx
Ich überlege hier die ganze Zeit schon rum und komm einfach nicht auf die Lösung.

Wie muß ich meine SQL Abfrage stellen, wenn ich anhand der postid die Seitenzahl rausbekommen möchte und das bei allen letzten Beiträgen für alle Foren?

Also es soll als Ergebniss herauskommen:

ForumId, Seite
3, 30
5, 15
6, 0
7, 60
usw.

ich komm einfach nicht drauf, müßte mit COUNT doch gehen? Aber wie?

Verfasst: 08.01.2007 21:23
von neospin
Hi,

das geht auch, ist sogar recht simpel:

Code: Alles auswählen

SELECT forum_id, count(posts) as post_count
FROM xy
GROUP BY forum_id     

Verfasst: 08.01.2007 21:30
von bgx
@neospin: Das wäre ja die Anzahl der Posts für ein Forum.

Ich möchte aber für alle Foren die Seitenzahl des letzten Beitrages herausfinden.

Verfasst: 08.01.2007 22:58
von Miriam
bgx hat geschrieben:...Ich möchte aber für alle Foren die Seitenzahl des letzten Beitrages herausfinden.
Oder meinst Du für alle Foren die Anzahl der Seiten für das letzte Thema? :o

Verfasst: 08.01.2007 23:03
von gn#36
Vielleicht sollte man das Problem erst einmal zerlegen:
auf ein Topic bezogen:
Es gibt eine Board Konfiguration für die Posts pro Seite (nenn ich mal $config)
Seitenzahl des letzten Posts:

Code: Alles auswählen

SELECT topic_id, CEIL(count(*)/($config)) AS seite FROM phpbb_posts GROUP BY topic_id
Test:
sagen wir $config sei 10.
Wir haben ein Thema mit 36 Beiträgen, d.h. der letzte Beitrag muss auf Seite 4 sein (1 bis 10 auf 1, 11 bis 20 auf 2 ...).
würde herauskommen: count(*) = 36
/10 = 3,6
CEIL() => 4

Diese Abfrage besorgt aus allen Themen die letzte Seite des Themas unabhängig vom Forum.
Wenn das pro Forum laufen soll müsste man erst noch das neueste Thema des Forums kennen.

Mir ist leider nicht ganz klar, wie du das genau auf ein Forum beziehen willst. Außerdem ist das - falls du mit dieser Postid einfach das Forum anzeigen willst - gar nicht nötig, du kannst viewtopic auch eine postid übergeben. -> du könntest vielleicht auch da einfach einen Blick rein werfen, da muss ja etwas ähnliches gemacht werden, das Skript kriegt eine post_id und bestimmt das anzuzeigende Forum nebst Seite (das wird vermutlich kaum anders laufen als mein SQL Befehl, aber wer weiß?)

Verfasst: 08.01.2007 23:10
von bgx
Sorry, ich bin so blöd wie ich lang bin. :lol: :oops:

Man sollte nicht solange rum coden, dann leidet die Konzentration.

Ich hab schon ne Lösung gefunden. Hab total übersehen, das die replies in der topicrow gespeichert werden.

Dank euch nochmal! :wink:

Verfasst: 08.01.2007 23:13
von mad-manne
bgx hat geschrieben:Sorry, ich bin so blöd wie ich lang bin. :lol: :oops:
Sorry für Offtopic, aber den konnte ich mir nicht verkeifen :oops:

Naja ... so dumm kannst du dann aber trotzdem nicht sein. YODA ist doch nur 94 cm gross :D

Gruss,
Manne.

Verfasst: 08.01.2007 23:31
von bgx
Sorry für OT danach könnt ihr das Ding auch zumachen!

Nee so dumm bin ich normalerweise auch nich, hab den Canned Mod umgefriemelt so das er per Cron wie hier im Forum bestimmte Beiträge raushaut.
Nur heute hab ich den Wald vor lauter Bäumen nicht gesehen.

Ich Post hier mal die Lösung, falls es noch jemand braucht:

Hab CH in einer älteren Version und wollte auf dem Index die letzten Beiträge in einer schöneren URL darstellen.

Es hat bereits genügt einfach t.topic_replies zur Abfrage hinzu zu schreiben und ein paar Codezeilen umzuschreiben.

Also hier t.topic_replies hinzu:

Code: Alles auswählen

	$sql = "SELECT p.forum_id, p.topic_id, p.post_time, p.post_username, u.username, u.user_id, t.topic_last_post_id, t.topic_title, t.topic_replies
				FROM ((" . POSTS_TABLE . " p
					LEFT JOIN " . TOPICS_TABLE . " t ON t.topic_id = p.topic_id AND t.forum_id = p.forum_id AND t.topic_moved_id = 0)
					LEFT JOIN " . USERS_TABLE . " u ON u.user_id = p.poster_id )
				WHERE ( p.post_time > $user_lastvisit $sql_last_posts )
					 AND p.post_id = t.topic_last_post_id";
und weiter unten dann:

Code: Alles auswählen

        $tsit = floor((intval($data['topic_replies'])) / intval($board_config['posts_per_page'])) * intval($board_config['posts_per_page']);
				
if ($tsit==0)
				$topic_title = '<a href="' . append_sid("topic," . $data['topic_id']) . ',-'.$url.'.html#' . $data['tree.topic_last_post_id'] . '" title="' . $data['tree.topic_title'] . '">' . $topic_title . '</a><br />';
else
				$topic_title = '<a href="' . append_sid("topic,".$tsit."," . $data['topic_id']) . ',-'.$url.'.html#' . $data['tree.topic_last_post_id'] . '" title="' . $data['tree.topic_title'] . '">' . $topic_title . '</a><br />';
usw....

Vielleicht füg ich es als Codeschnipsel auf meiner Seite hinzu.

Schönen Abend noch und Danke für die Hilfe.

P.S.: Fühl mich richtig Wohl bei euch... (Sollte auch mal gesagt werden)