2016-05-05 3 views
1

ich zu einer Gruppe meiner Foren in Kategorien haben möchte, wie hier zu sehen:Wie verschiedene Foren in Kategorien gruppieren PHP

enter image description here

ich eine Datenbanktabelle, die einen Titel nimmt und eine ID erstellt genannt forum_categories habe derzeit für alle erstellten Kategorien. Ich habe auch eine Spalte in einer Datenbanktabelle mit dem Namen forum_forums (all die verschiedenen Foren, die ich kategorisieren möchte), die einen Wert mit dem Namen category_apart_of nimmt.

Wie würde ich die Foren in ihrer richtigen Kategorie ID auflisten?

Vielen Dank!

Wenn Sie etwas von meinem Code sehen möchten, oder möchte ich etwas ausführlicher erklären, bitte sagen Sie mir.

Meine aktuellen Code für die Foren-Eintrag (Anmerkung: eine SQL-Abfrage alle Foren zu erhalten, ist oben):

<thead> 
    <tr> 
     <th style="width: 50%;">Forum</th> 
     <th style="width: 10%;">Threads</th> 
     <th style="width: 10%;">Posts</th> 
     <th style="width: 30%;">Latest Posts</th>   
    </tr> 
    </thead> 
    <tbody> 
    <?php 
     while($row = $stmt->fetch(PDO::FETCH_ASSOC)) { 
     $forumID = $row['forumID']; 
     $forum_title[] = $row['forum_title']; 
     $forum_description[] = $row['forum_description']; 
     $forum_total_threads[] = $row['forum_total_threads']; 
     $forum_total_posts[] = $row['forum_total_posts']; 
     $forum_latest_thread[] = $row['forum_latest_thread']; 

     $stmt2 = $db->prepare("SELECT * FROM forum_threads WHERE forum_thread_belongs_to = '$forumID'"); 
     $stmt2->execute(); 
     $count = $stmt2->rowCount(); 

     echo ' 
     <tr><td><h4 style="margin-bottom: 0px;"><a style="margin-bottom: 0px;" href="forum.php?id=' 
     . $row['forumID'] . ' ">'.$row['forum_title'] 
     . '</a></h4><br /><h6 style="margin-bottom: 0px; margin-top: 0px;">' 
     .$row['forum_description'].'</h6></td><td style="text-align: center;><span">'.$count 
     .'</span></td><td style="text-align: center;><span">'.$row['forum_total_posts'] 
     .'</span></td><td>'.$row['forum_latest_thread'].'</td></tr> 
     '; 
    } 
    ?> 
</tbody> 

DDL für beide Tabellen:

CREATE TABLE IF NOT EXISTS `forum_forums` (
`forumID` int(11) NOT NULL AUTO_INCREMENT, 
`forum_title` varchar(255) NOT NULL, 
`forum_description` varchar(255) NOT NULL DEFAULT 'This forum does not have  a description', 
`forum_total_threads` int(255) NOT NULL DEFAULT '0', 
`forum_total_posts` int(255) NOT NULL DEFAULT '0', 
`forum_latest_thread` varchar(255) NOT NULL DEFAULT 'There are no new threads', 
`forum_apart_of` int(11) NOT NULL, 
`category_apart_of` int(11) NOT NULL, 
PRIMARY KEY (`forumID`) 
) ENGINE=MyISAM DEFAULT CHARSET=latin1 AUTO_INCREMENT=1 ; 

CREATE TABLE IF NOT EXISTS `forum_categories` (
`catID` int(11) NOT NULL AUTO_INCREMENT, 
`cat_title` varchar(255) NOT NULL, 
PRIMARY KEY (`catID`) 
) ENGINE=MyISAM DEFAULT CHARSET=latin1 AUTO_INCREMENT=1 ; 
+1

Ich bin ein wenig verwirrt durch Ihre Datenbank-Struktur. Könnten Sie bitte Ihre Frage bearbeiten, um eine ERD oder eine DDL einzuschließen? –

+0

Ihre veröffentlichte DDL enthält nicht die Tabelle 'forum_threads', auf die in Ihrem Code verwiesen wird. –

+0

Behoben, das tut mir leid. – Jakob

Antwort

1

Ihre Frage: Wie würde ich die Foren in ihrer korrekten Kategorie-ID auflisten?

Lösung: Wie Sie bereits Ihre Datenbankstruktur haben und wie Sie bereits und soll wahrscheinlich wissen, um Ihre categories Tabelle mit Ihrer forums Tabelle zu verknüpfen Sie müssen mindestens eine Spalte in beide ähnlich haben, das ist ein category_id von Ihrer categories Tabelle automatisch inkrementierte Spalte nämlich als id, also um Ihr Forum in die bestimmte Kategorie zu kategorisieren, müssen Sie die Kategorie id zu einer zusätzlichen Spalte als category_id in Ihrer forums Tabelle hinzufügen, so dass jedes Forum seine Kategorie dort drin erwähnt wird ID-Wert ..!

Und dann können Sie Ihre Foren nach Kategorien wie auf diese Weise auflisten, wie:

Hinweis: Dieser Code wird für jede Kategorie Forum überprüfen, und es wird in jeder Kategorie der Liste all diese Foren sortieren ..!

<?php 
//Assuming you have fetched whole data from forums table in $forums 
//And whole data from categories in $categories 
//So moving forward with the code 

foreach ($categories as $category) { 
echo "<h1>".$category['category_title']."</h1>"; 
$category_id = $category['category_id']; 
$query = mysqli_query($mysqli,"SELECT * FROM forums WHERE category_id='$category_id'"); 

$forums = array(); 
while ($rows = mysqli_fetch_array($query)) { 
    $forums[] = $rows; 
} 

foreach ($forums as $forum) { 
echo "Title :".$forum['forum_title']."</br>"; 
echo "Descripton :".$forum['forum_description']."</br></br></br>"; 
} 
echo "</br></br></br></br>"; 
} 
?> 

ARBEITS CODE-BEISPIEL:

<?php 
$categories = array(
    array('id' => "04",'category_title' => "News & Support"), 
    array('id' => "23",'category_title' => "Current Affairs"), 
    array('id' => "12",'category_title' => "Politics")); 

    $forums = array(
    array('forum_title' => "News 1",'category_id' => "04"), 
    array('forum_title' => "News 2",'category_id' => "04"), 
    array('forum_title' => "Current Afairs 1",'category_id' => "23"), 
    array('forum_title' => "Current Afairs 2",'category_id' => "23"), 
    array('forum_title' => "Politics 1",'category_id' => "12"), 
    array('forum_title' => "Politics 2",'category_id' => "12")); 

foreach ($categories as $category) { 
echo "<h1>".$category['category_title']."</h1>"; 
$category_id = $category['id']; 
$output = array(); 
for ($i=0;$i<=count($forums);$i++) { 
if ($category_id == $forums[$i]['category_id']) { 
$add_forum = array('forum_title' => $forums[$i]['forum_title'],'category_id' => $forums[$i]['category_id']); 
array_push($output, $add_forum); 
} 
} 
for ($i=0;$i<=count($output);$i++) { 
echo "Title :".$output[$i]['forum_title']."</br>"; 
} 
echo "</br></br></br></br>"; 
} 
?> 

OUTPUT:

News & Support 

Title :News 1 
Title :News 2 


Current Affairs 

Title :Current Afairs 1 
Title :Current Afairs 2 


Politics 

Title :Politics 1 
Title :Politics 2 
+0

Danke. Wenn ich jetzt daran arbeite, sage ich dir, ob es funktioniert, wenn ich fertig bin. – Jakob

+0

Nr.Problem..Lass mich wissen, wenn es dein Problem behebt, also bin ich sicher, dass du es als akzeptiert markieren wirst ..! –

+0

Arbeitete, danke, mein Herr! – Jakob

Verwandte Themen