php - 创建一个 "Table of Contents"类型的数据库

标签 php mysql database-design documentation documentation-generation

<分区>

好的,让我们从头开始,我们正处于需要为我们的产品创建文档的阶段。由于我们的产品是基于网络的,我打算创建一个在线文档并在每个产品上添加一份副本。

我计划的文档将使用 PHP-HTML 前端和数据库后端。

所以这是我要构建的内容:

Table of Contents
    1 Getting Started
        1.1 Hello World
        1.2 Installing
            1.2.1 Windows
            1.2.2 Unix
            1.2.3 Mac
        1.3 Configuring
            1.3.1 Windows
            1.3.2 Unix
            1.3.3 Mac
    2 Hal
        2.1 Dave
        2.2 9000
        ....
        ....

这是表格。

CREATE TABLE content(
    id VARCHAR(50) NOT NULL,
    parentId VARCHAR(50) DEFAULT NULL,
    title VARCHAR(255) NOT NULL,
    message TEXT NOT NULL,
    dateReg TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,

    PRIMARY KEY(id)
    FOREIGN KEY (parentId) REFERENCES `content` (id) ON DELETE CASCADE ON UPDATE CASCADE
)

请原谅语法,这只是一个模型

插入内容如下

INSERT INTO content ('1', 'Getting Started', 'Hello', NULL);
INSERT INTO content ('1.1', 'Hello World', 'cout << \"Hello World\";', NULL);
.... and so on

检索必须在 php 中完成。下面只是做一个“目录类结构”

$top_query = "SELECT * FROM content WHERE parentId IS NULL";
while($top_res = mysql_fetch_array($top_query)){

    print $top_res['title'] . "\n";

    $child_query = mysql_query("SELECT * FROM content WHERE parentId={$top_res['id']}");
    while($child_res = mysql_fetch_array()){

        print $child_res['title'] . "\n";
    }
}

Now i know what you will say, it needs to be recursive, yes i know, and right now lack of sleep is so bad that i cant even spell recursive (It was auto spelt by google chrome). But recursion is not my issue, i can figure that out.

我的问题:我忍不住认为这将发送大量查询,并且数据库将让每个访问该文档的用户心脏病发作。

问题:我是否走在正确的轨道上,或者有任何人有建议使这项工作充分发挥作用并降低性能强度。

提前致谢

最佳答案

这是一个典型的树结构,所以只需谷歌一些不发送几十个查询的解决方案:google: php tree structure .

Nested Set在这里可能是一个完美的选择,因为它允许您轻松检索整个树、到指定节点的路径(root -> sub -> sub -> node)和元素在树中的固定位置.

关于php - 创建一个 "Table of Contents"类型的数据库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5072239/

相关文章:

PHP 首先对非空组列表进行排序,然后是空组

MySQL GROUP BY 不带聚合而不是 LIMIT

Mysql表设计: table roles

php - 使用 sed 或 awk 将反引号替换为单引号

PHP: undefined index !但它被定义

php - 将大字符串数据从 JavaScript 传递到 php

mysql - INNER JOIN 与 2 CASE

sql - 如何通过约束强制引用的行也具有给定类型

sql - 如何在数据库中模拟标记联合?

php - 使用 PHP 发布整个 mySQL 命令