php - 对于有类别的帖子,什么更快 : Several database calls or additional PHP code?

标签 php mysql

我正在设计一个博客数据库。我希望帖子属于任意数量的类别,包括不属于任何类别(即类别数 = 0、1、2、3 ...)。

我知道设计这样一个数据库的常用方法(例如在 Wordpress 中)是一张表用于帖子,一张表用于类别,一张表用于关系,因此:

table relationships
    column relationship id
    column post id
    column category id

但这意味着要显示一篇文章,我的脚本必须进行至少三个数据库查询。这对我来说似乎很慢。

这就是为什么在另一个博客中,我只有一个帖子表,其中包含一个用于类别的 varchar 列,我在其中插入了一个包含所有类别名称的字符串,我在 PHP 中对其进行了解析,因此

table posts
    column post id
    ... (many other columns)
    column categories

其中列类别包含可能如下所示的字符串:

apples,oranges,bananas

我只是用 PHP explode()ed。

请解释为什么我应该避免第二种方法(一张表,爆炸)。它肯定有什么我错过的错误,因为它在博客软件中不常用。


注意:

可能仍然有一个列出类别的表格,在创建帖子时将新类别写入其中,并从中绘制类别列表以显示它们,例如,侧边栏。

我希望对帖子的查询比对类别帖子的查询多得多,这就是为什么我不太担心在第二个数据库中查询某个类别的帖子,这在第一个数据库中可能更快.

最佳答案

在第二种情况下,您在按某个类别查找帖子时会遇到很大的问题。

例如,你写了一些关于编程语言的文章,想在不同的页面上显示所有关于 python、php、ruby 等的文章……但是你不能写简单快速的数据库请求,因为你违反了 1 个范式在你的第二个数据库方案中。

JimL已经提到了 JOIN,它允许发出 1 个请求并从带有链接表的标准多对多关系方案中获取所有需要的信息 post2category

关于php - 对于有类别的帖子,什么更快 : Several database calls or additional PHP code?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36526311/

相关文章:

MySQL查询,删除所有空格

PHP Mysqli 为多个值选择值并为重新选择显示相同的值

php - 如何解码mysql_real_escape_string

mysql - 查询可了解以下内容

php - Pear Mail Queue - 日志/记录?

php - Composer psr-0 自动加载器和符号链接(symbolic link)

php - 如何使用 php 和 MySQL 从表中获取各个列?

MySql 用正则表达式替换和更新列内容?

php - 在液体中创建一个简单的数组

php - 在子文件夹中创建 txt 文件列表文件