Kategorieen unterteilung in einem Forum

Chaoslion

Mitglied
Manno dauernd geht etwas nicht.
Mein Problem diesmal ist, dass ich eine Kategorieen unterteilung will, wie hier im Forum.
Ich habe schon etliches versucht funktionierte aber nie richtig, denn dann wird immer zu jedem "Forum link" die Kategorie dazugeschrieben, für Lösungen danke ich sehr :).
Hier noch der Quellcode:
PHP:
<?php
include "connect.php";
include "login.help.php";
?>
<table width="100%">
 	<tr>
	<td>Forum:</td>
	<td>Letzter Autor:</td>
	<td>Datum:</td>
	<td>Gehe zu letztem Beitrag:</td>
	<td>Kategorie:</td>
	</tr>

<?php 
$forum_categories=mysql_query("select * from Forum_Forum order by kategorie");
$sql = "SELECT Forum_kat.katname
FROM Forum_Forum
INNER JOIN Forum_kat ON Forum_Forum.kategorie = Forum_kat.id order by Forum_kat.id";
$res = mysql_query($sql);

while ($forum=mysql_fetch_assoc($forum_categories)) 
{ 
if($row = mysql_fetch_assoc($res)){
foreach($row as $key => $value){ echo '
	<tr>
	<td>'.$value.'</td>
	</tr>'; }}
 $forum_posts=mysql_query("select * from Forum_Post where fid='".$forum['id']."' order by id desc limit 1"); 
 $forum_post=mysql_fetch_assoc($forum_posts);

	echo '<tr>
	<td valign="top"><a href="thread?fid='.$forum['id'].'">'.$forum["fname"].'</a></td>
	<td valign="top">'.$forum_post['creator'].'</td>
	<td>'.$forum_post['date'].'</td>
	<td><a href="Post.php?fid='.$forum_post["fid"].'&tid='.$forum_post["tid"].'"><img src="pfeil.jpg"></a></td>';
}
?> 
</table>
 
Hi,

eine besonders elegante Lösung habe ich auch nicht, aber hier mal die Vorgehensweise in meinem Board:

Die Tabelle forum hat einen numerischen Schlüssel für die Kategorie, über den der Titel aus einer weiteren Tabelle abgerufen werden kann.

Ich sortiere die Einträge nach Kategorie und Datum, und teste beim Auslesen des Ergebnisses, ob sich die aktuelle Kategorie von der letzten unterscheidet:
PHP:
$query = 'SELECT * from forum WHERE 1 ORDER BY category ASC, date, DESC';
$result = mysql_query($query) or die(mysql_error());
$lcat = 0; // letzte Kategorie
while ($line = mysql_fetch_assoc($result)) {
    if ($line["category"] != $lcat) {
        // Zeile mit Kategorieüberschrift abfragen:
        $ctitle = getTitleFromCat($line["category"]);
        // und hier ausgeben.
        $lcat = $line["category"];
    }
    // Hier Spaltenwerte ausgeben
}

function getTitleFromCat($id) {
    $query = 'SELECT title FROM category WHERE id='.$id;
    $result = @mysql_query($query);
    if ($line = @mysql_fetch_assoc($result)) {
        return $line["title"];
    } else {
        return "";
    }
}

Gruß
.
}
 
Äh. Bei mir funktionierts zumindest (Titel wird nur ausgegeben, wenn sich die Kategorie ändert). Du musst natürlich alle Foren einer Kategorie mit dem selben Wert in der category-Spalte versehen:
Code:
FORUM:
 id   | title            | category
---------------------------------------
 1      Smalltalk          1
 2      PHP                2
 3      Flash              2
 4      Feedback           3
---------------------------------------

CATEGORY:
 id   | title
-------------------------------
 1      Diverses
 2      Programming
 3      Intern
-------------------------------

Gruß
.
 
hmm stimmt, der sache näher gekommen, aber jetzt wird mir statt der Kategorieen namen die id angezeigt und ich weiß nicht wie ich das anders machen soll :confused:
Hier noch der Quellcode:
PHP:
<?php
include "connect.php";
 $query = 'SELECT * from Forum_Forum ORDER BY kategorie ASC'; 
$result = mysql_query($query) or die(mysql_error()); 
$lcat = 0;
while ($line = mysql_fetch_assoc($result)) { 
    if ($line["kategorie"] != $lcat) { 
        $ctitle = getTitleFromCat($line["kategorie"]); 
        $lcat = $line["kategorie"]; 
   	echo $lcat."<br>"; 
	}
	echo $line["fname"]."<br>";
} 

function getTitleFromCat($id) { 
    $query = 'SELECT * FROM Forum_kat';
    $result = mysql_query($query); 
    if ($line = mysql_fetch_assoc($result)) { 
        return $line["katname"]; 
    } else { 
        return ""; 
    } 
} 

?>
 
Hi,

nicht
PHP:
echo $lcat."<br>";
, sondern
PHP:
echo $ltitle."<br>";
- in $lcat steht ja die ID, wärend getTitleFromCat den dazugehörigen Titel ausgibt. ;)

Gruß
.
 
Zurück