我一直在创建博客,但我无法决定对文章进行分类的最佳方式。
我认为最好的方法是在文章表中包含类别,其中包括以下行。
articles structure
+----------------------+
| article_id |
| article_title |
| article_content |
| article_category |
+----------------------+
在我撰写的每篇文章中,我都会包含文章类别。实施例。
+------------+---------------+------------------+------------------+
| article_id | article_title | article_content | article_category |
+------------------------------------------------------------------+
| 1 | How do I.... | Want to know... | How-to |
| 2 | Learn faceb.. | Facebooks new... | Social Network |
+------------+---------------+------------------+------------------+
然后使用if(isset($_GET['article_id']) && isset($_GET['article_category'])){ }
一起检索两者,或者为特定类别创建新表会更好吗?以下是一个例子。
categories structure
+-----------------+
| category_id |
| category_title |
| article_id |
+-----------------+
每当我需要根据类别检索文章时,我只是从类别表中使用它(上面的类别结构只是一个例子)?
此外,如果有人可以腾出时间来回答一个简单的问题,我会很感激。我将使用上面的文章表作为信息的示例。
而不是使用以下内容来检索文章,
www.example.com/article.php?article_id=1&article_category=How-to
我想显示文章网址如下,这可以通过使用mod_rewrite来完成,还是我需要在我的服务器中创建文件夹才能实现?
www.example.com/How-to/How-do-i
stackoverflow是否使用mod_rewrite执行以下操作?
www.stackoverflow.com/questions/id/title?
注意:我知道如何在网址中显示标题,我一直在想的是重写。
感谢您的时间。
答案 0 :(得分:1)
看一下使用pivot
表。这不是MySQL中的一些奇特的数据类型,而只是一个如何组织数据的概念。这个想法类似于Many To Many
关系。许多文章与许多类别有关系。这也允许您灵活地为文章分配多个类别。像Laravel这样的PHP框架使这些关系变得轻而易举。这是一个基本的概述。
文章表
articles structure
+-----------------+
| id |
| article_title |
| article_content |
+-----------------+
类别表
categories structure
+-----------------+
| id |
| category_title |
+-----------------+
然后使用数据透视表在文章和类别之间建立不同的关系。
categories_articles表
articles_categories structure
+-----------------+
| id |
| article_id |
| category_id |
+-----------------+
在此数据透视表中,您可以为同一篇文章指定多行,以指明该文章的多个类别。最后,你会做这样的事情。
<?php
$article = // Get the article you want, including it's id.
$categoryIds = // SELECT * FROM categories_articles WHERE article_id = $article['id']
$categories = // SELECT * FROM categories WHERE id = (Each of the $categoryIds)
这显然是伪代码,你实际上可以用一个SQL查询完成所有这些,但你明白了。
答案 1 :(得分:1)
你想要的是一个常规的 1:n关系。一篇文章可以有一个类别,一个类别可以有多个文章。这可以通过两个不同的模型来解决,其中一个模型保存另一个模型的元素的标识符。就SQL而言:你会有两个表,articles
你要保存category_id
(记住:一篇文章一类,所以这是一个正确的实现)。
articles
+----------------------+
| article_id |
| article_title |
| article_content |
| category_id |
+----------------------+
categories
+-----------------+
| category_id |
| category_title |
+-----------------+
通常使用foreign key constraint来完成。完成后,SQL会检查条目是否有效(因此文章不能包含表category_id
中不存在的categories
编号)。此外,您还可以指定,例如删除类别后,所有引用文章也应删除。
如果您希望一篇文章能够拥有多个类别,那么您正在寻找 n:m关系。在SQL中,您创建第三个表
articles_categories
+-----------------+
| article_id |
| category_id |
+-----------------+
这两个属性构建主键,每个属性也是外键。
对于你的第二个问题:是的,这可以通过mod_rewrite轻松完成。有很多教程,应该很简单。所以也可能使用它,但我不能肯定地告诉你。
答案 2 :(得分:1)
对于从数据库中存储/获取数据,一种非常简单的方法是拥有三个表。文章表将保持不变,但类别表需要从中删除文章ID。第三个表将映射两者之间的M:N关系,如下所示:
id | article_id | cat_id
---------------------------
当一篇文章与一个类别一起保存时,一个新的条目将放在这个表格中(我们称之为articles_categories_map)来将这两个条目联系起来。如果要按类别检索所有文章,则查询将为:
SELECT `article_id` FROM `articles` INNER JOIN `articles_categories_map`
ON `articles`.`id`=`articles_categories`.`article_id` INNER JOIN `articles_categories`
ON `articles_categories_map`.`category_id`=`articles_categories`.`id`
WHERE `articles_categories`.`title` = ""
注意:此方法允许您将多个类别附加到一篇文章,反之亦然。
至于重写你的网址,mod_rewrite当然可以做到这一点。在使用MVC时,您应该花些时间研究解决此问题的常用方法。这将使您深入了解如何构建规则。
干杯