Neuester Forenbeitrag in unendlicher Tiefe?

Radhad

Erfahrenes Mitglied
Hallo zusammen,

ich habe mir ein Forum geschrieben, allerdings stoße ich jetzt an eine Grenze. Das Forum ist so aufgebaut, dass ich unendlich viele Unterforen haben könnte. Vorher habe ich mir da nicht so genaue Gedanken gemacht, wie ich denn jetzt in einem Tree den jeweils neuesten Beitrag bestimmen kann. Bisher mache ich das nur ein bestimmtes Forum:
PHP:
$sql = "SELECT fp.PostID, fp.ThreadID, ft.Title, u.Username, fp.Postnumber, fp.CreateDate FROM Posts fp JOIN Threads ft ON ft.ThreadID = fp.ThreadID JOIN Users u ON u.UserID = fp.CreatedBy WHERE fp.CreatedDate = (SELECT MAX(fop.CreatedDate) FROM Posts fop JOIN Threads fot ON fop.ThreadID = fot.ThreadID WHERE fot.ForumID = ".$data['ForumID'].")";
		$result2 = mysql_query($sql) or die("Error: " . mysql_error());
		if(mysql_num_rows($result2) > 0)
		{
			$data2 = mysql_fetch_array($result2);
			
			if(bcdiv($now, 86400, 0) == bcdiv($data2[5], 86400, 0))
			{
				$datum = "Heute";
				$datum .= date(", H:i",$data2[5]);
			}
			else if((bcdiv($now, 86400, 0) - 1) == bcdiv($data2[5], 86400, 0))
			{
				$datum = "Gestern";
				$datum .= date(", H:i",$data2[5]);
			}
			else
			{
				$datum = date("d.m.Y, H:i",$data2[5]);
			}
			echo '<td class="forumcolum"><a href="index.php?nid='.$nid.'&amp;t='.$data2[1].'#post'.$data2[0].'">'.$data2[2].'</a><br />von '.$data2[3].'<br />'.$datum.' Uhr</td>';
		}
		else 
		{
			echo '<td class="forumcolum">Kein Thema vorhanden</td>';
		}
		mysql_free_result($result2);
Für jeden Tipp bin ich dankbar!


Gruß Radhad
 
Zuletzt bearbeitet:
Das kenn ich schon ;) Hab ich auch schon dran gedacht. Meine Idee war zuerst, Rekursiv alle neuesten Beiträge der Unterforen zu holen und anhand des Datums den neuesten Eintrag zu bestimmen. Weiß aber nicht, ob das so gut ist.

Hätte da jemand eine bessere Idee?
 
Ok, ich habe nun mal dran gearbeitet. Hier mal die Reihenfolge, was passiert:
PHP:
$lastpostid = last_post_forum($data['ForumID']);
		
		echo '<td>'.$lastpostid.'</td>';
PHP:
function last_post_forum($forumid)
{
	$lastpost['id'] = 0;
	$lastpost['date'] = 0;
	
	$post = last_post($forumid);
	
	if($post['CreatedDate'] > $lastpostdate)
	{
		$lastpost['date'] = $post['CreatedDate'];
		$lastpost['id'] = $post['PostID'];
	}
	
	$sql = "SELECT ForumID FROM Forums WHERE ParentForumID = ".$forumid;
	$ressource = mysql_query($sql) or die(mysql_error());
	while($forum = mysql_fetch_assoc($ressource))
	{
		$funcpost = last_post($forum['ForumID']);
		
		if($funcpost['CreatedDate'] > $lastpostdate)
		{
			$lastpost['date'] = $funcpost['CreatedDate'];
			$lastpost['id'] = $funcpost['PostID'];
		}
	}
	
	return $lastpost['id'];
}
PHP:
function last_post($forumid)
{
	$sql = "SELECT p.PostID, p.CreateDate FROM Posts p JOIN Threads t ON t.ThreadID = p.ThreadID JOIN Forums f ON f.ForumID = t.ForumID WHERE f.ForumID = ".$forumid;
	$ressource = mysql_query($sql) or die(mysql_error());
	$post = mysql_fetch_assoc($ressource);
	if(mysql_num_rows($ressource) == 0)
	{
		$post['PostID'] = 0;
		$post['CreateDate'] = 0;
	}
	
	return $post;
}
Kommt aber immer nur 0 zurück ^^
 
Ich nehme an du willst irgendwo die aktuellen z.b. 5 Postings aus dem gesamten Forum darstellen. Warum dann so umständlich? Ich meine alle Postings sind ja in der gleichen Tabelle nur die Forums ID ist anders. Eigentlich sollte eine 0815 Anfrage an die Postingtabelle sortiert nach post timestamp reichen. So hab ich es damals bei nem vbulletin board gemacht. Wieviel Unterforen es da gibt ist ja total egal.

Ansonsten die gleiche Geschichte mit Forum ID in der SQL Abfrage
 
Zuletzt bearbeitet:
Zurück