2016-05-05 3 views
1

Я хотел бы, чтобы сгруппировать мои форумы по категориям, как показано здесь:Как группировать различные форумы в категории PHP

enter image description here

Я в настоящее время есть таблица базы данных называется forum_categories, которая принимает название и создает идентификатор для всех созданных категорий. У меня также есть столбец в таблице базы данных с именем forum_forums (все разные форумы, которые я хочу классифицировать), который принимает значение с именем category_apart_of.

Как я хотел бы перечислить форумы в их правильном идентификаторе категории?

Большое вам спасибо!

Если вы хотите увидеть какой-либо из моих кодов или хотите, чтобы я объяснил что-нибудь более подробное, скажите, пожалуйста.

Мой текущий код для перечисления на форумах (примечание: запрос SQL, чтобы получить все форумы выше):

<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 для обеих таблиц:

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

Я немного смущен вашей структуры базы данных. Не могли бы вы изменить свой вопрос, включив ERD или DDL? –

+0

Ваш опубликованный DDL не содержит таблицу 'forum_threads', на которую ссылается ваш код. –

+0

Исправлено, извините за это. – Jakob

ответ

1

Ваш вопрос: Как я могу перечислить форумы в их правильном идентификаторе категории?

Решение: Как у вас уже есть структуры баз данных и, как вы уже и, вероятно, следует знать, чтобы связать categories таблицы с forums таблицей вы должны иметь по крайней мере один столбец как аналогичные, который является category_id из вашего таблицы с автоинкрементами, а именно id, поэтому для того, чтобы классифицировать ваш форум в определенной категории, вам необходимо добавить категорию id в дополнительную колонку, как category_id, в таблицу forums, чтобы каждый форум имел свою категорию, указанную там, в id значение ..!

И тогда вы можете перечислить ваши форумы по категориям, как таким образом, как:

Примечание: Этот код будет проверять для каждой категории форум, и он будет сортировать список всех этих форумах в рамках каждой категории ..!

<?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>"; 
} 
?> 

РАБОЧИЙ ПРИМЕР КОДА:

<?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>"; 
} 
?> 

ВЫВОД:

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

Спасибо. Работая над этим сейчас, я скажу вам, работает ли это, когда я закончу. – Jakob

+0

No..Problem..Позвольте мне узнать, исправляет ли ваша проблема, поэтому я уверен, что вы пометите ее как принятую ..! –

+0

Работал, спасибо, сэр! – Jakob

Смежные вопросы