Настраиваемая CMS как создавать категории для сообщений с помощью базы данных PHP/MySQL


Я ищу по всему Интернету, но, похоже, не могу найти простой учебник, который мог бы помочь мне с моей пользовательской CMS, которую я создаю.

Я хотел бы добавить несколько категорий в свои сообщения.

Например:

Title: post 1 
Content: content goes here 
Categories: Technology, Computers, Science, Internet

Title: post 2 
Content: content goes here 
Categories: Music, Jazz, Classic

Итак, вот что я должен опубликовать в своих статьях

Структура моей базы данных

postID | postTitle | postDesc | postCont | postDate


1   Post 1      info1   content1    date1
2   Post 2      info2   content2    date2
3   Post 3      info2   content3    date3

ФОРМА

<form action='' method='post'>

<p><label>Title</label><br />
<input type='text' name='postTitle' value='<?php if(isset($error)){ echo $_POST['postTitle'];}?>'></p>

<p><label>Description</label><br />
<textarea name='postDesc' cols='60' rows='10'><?php if(isset($error)){ echo $_POST['postDesc'];}?></textarea></p>

<p><label>Content</label><br />
<textarea name='postCont' cols='60' rows='10'><?php if(isset($error)){ echo $_POST['postCont'];}?></textarea></p>

<p><input type='submit' name='submit' value='Submit'></p>

</form>

PHP-код для размещения его в базе данных

//insert into database
$stmt = $db->prepare('INSERT INTO blog_posts (postTitle,postDesc,postCont,postDate) VALUES (:postImage, :postTitle, :postDesc, :postCont, :postDate)') ;
$stmt->execute(array(
':postTitle' => $postTitle,
':postDesc' => $postDesc,
':postCont' => $postCont,
':postDate' => date('Y-m-d H:i:s')
));

//redirect to index page
header('Location: index.php?action=added');
exit;
Author: ekad, 2014-06-21

1 answers

Вот пример основного принципа Отношений "Многие ко многим", который подходит для этой задачи. Связь "многие ко многим" - это шаблон проектирования между двумя таблицами, когда одна или несколько строк в одной таблице могут быть связаны с несколькими строками в другой таблице. Связь между двумя таблицами хранится в третьей таблице, в которой хранятся первичные ключи каждой связи (столбцы postID и categoryID).

Примеры базы данных таблицы:

post

postID | postTitle | postDesc | postCont | postDate

1    Post 1    info1    content1    date1
2    Post 2    info2    content2    date2
3    Post 3    info2    content3    date3

post_category

postID | categoryID

1    1
2    5
3    1
2    6
3    3
2    7
1    2
1    3
1    4

category

categoryID | categoryTitle

1    Technology
2    Computers
3    Science
4    Internet
5    Music
6    Jazz
7    Classic

Примеры запросов MySQL:

MySQL query to get all categories related to post

SELECT * FROM `category` NATURAL JOIN `post_category` WHERE postID=1

categoryID | categoryTitle | postID 

1    Technology    1
2    Computers     1
3    Science       1
4    Internet      1

MySQL query for all posts of the category

SELECT * FROM `post` NATURAL JOIN `post_category` WHERE categoryID=1

postID | postTitle | postDesc | postCont | postDate | categoryID 

1    Post 1    info1    content1    date1    1
3    Post 3    info2    content3    date3    1
 5
Author: Danijel, 2014-06-21 17:53:50