php - MySQL 类别列表与单独的类别表

标签 php mysql sql

我正在创建一个博客网站,您可以通过该网站为博客分配类别。我的原始表格如下所示:

+----+----------+-------+---------+
| ID | CATEGORY | TITLE | ARTICLE |
+----+----------+-------+---------+
| 01 | cars     | Title | Article |
| 02 | cars     | Title | Article |
| 03 | sport    | Title | Article |
| 04 | music    | Title | Article |
| 05 | music    | Title | Article |
+----+----------+-------+---------+

如您所见,类别是一个书面属性。主题是有一个单独的类别列表,我创建的列表如下:

+-------------------+
| CAT_ID | CATEGORY |
+--    --+----------+
| 01     | cars     |
| 02     | sport    |
| 03     | music    |
+--------+----------+

这会将原始表更改为:

+----+--------------------+----------+-------+---------+-----------+
| ID | BELONGS_TO_BLOG_ID | CATEGORY | TITLE | ARTICLE | AUTHOR_ID |
+----+--------------------+----------+-------+---------+-----------+
| 01 | 01                 | 01       | Title | Article | 01        |
| 02 | 01                 | 01       | Title | Article | 01        |
| 03 | 02                 | 02       | Title | Article | 02        |
| 04 | 02                 | 03       | Title | Article | 03        |
| 05 | 02                 | 03       | Title | Article | 03        |
+----+--------------------+----------+-------+---------+-----------+

现在,如果我想删除属于 01 类别的 cars,而不是删除它(因为显然有 2 篇文章属于此类别),我可能会将其更改为 未分配。所以这里没有问题,但如果我随后删除 music (03) 并将其更改为 unnassigned 我最终会得到 ID 的 01 和 03 未分配。因此,现在当我运行搜索 unnassigned 文章时(应该返回 4),我只会看到 2 或一个错误。

拥有原始表格,当有人更改汽车类别时,他们只需更新记录不是更好吗?

最佳答案

嗯,你可以验证一下。如果您需要遵循数据库规则,那么您肯定必须检查两个表之间的父子关系。有3种方法

<强>1。 FOREIGN KEY:这将防止父级删除,直到子级记录存在

ALTER TABLE items
ADD FOREIGN KEY (category)
REFERENCES category(categoryTable)

<强>2。从php脚本验证:某些存储引擎可能不支持第1点。在这种情况下,您可以简单地使用php进行验证。在删除类别之前,只需计算是否有某些产品不存在

$sql="select count(*) as cnt  from items where category=CATEGORY_TO_BE_DELETED";

if(mysql_query('cnt')>0) //means it has some items 
  //do not delete or throw some error
else
  //delete

3 逻辑删除/软删除: 有时你需要删除类别(假设你的类别下有1000个产品,并且无法删除)。然后你可以有一些flags,比如is_deleted。您可以打开关闭标记删除、取消删除

关于php - MySQL 类别列表与单独的类别表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25078132/

相关文章:

mysql - 下面的sql语句有区别吗?

mysql - SELECT AND INSERT QUERY into multiple table with conditions

php - 只有一个数据库还是多个数据库?

mysql - 如何选择条件存储在表中的mysql行?

php - 线程消息系统的查询不起作用(基于其他成员的帖子)

PHP 比较 2 个整数并用更大的整数更新表

sql - 困难的SQL查询所有和任何情况

php - 在 PHP 中使用默认魔术引号或用户定义的 addslash/stripslash 哪个更好?

php - DOM文档 : how to get inner HTML as Strings separated by line-breaks?

PHP fatal error ,调用未定义的方法 mysqli_stmt::get_result()