文档专题任务再思考

阅读数:1284 发布时间:2016-06-07 00:47:54

作者:zzl005 标签: 朱忠来005 文档 数据库 Mysql 递归

数据库重新设计

先看下今天之前的思路(重点是表结构)


6月6日前,思路:

前台页面和后台数据

在这个任务中,我需要同时负责页面设计和提供后台数据,整个思路都不一样,在一开始设计页面的时候,就需要考虑到页面中某些数据如何从后台数据库中获取,怎么显示,同时,还有一个问题就是需要与别人的配合,因为,因为多个技术文档组成一个专题课程,每个文档都有一部分数据是来自 课程这个数据库,所以,这个时候就需要了解别人的建的表的结构,都有哪些是自己页面需要的。

数据表结构

前端(courses_id=3,fid=0)  
    |———前端基础(courses_id=13,fid=3)  
            |————HTML基础(document_id=103,)
            |————CSS
    |———前端进阶
            |————HTML5
            |————CSS3
后端
    |———数据库
            |————Mysql
            |————操作系统

具体问题的分析

在我的文档列表页面中,主要分为前端、后端、App、硬件、其他几个大的专题,在每个大专题下面,都会列出多个文档,每个文档有文档名称、文档分值、文档的描述(基础还是进阶还是高阶)、文档所属的课程(比如 HTML 还是 CSS )


之前,我考虑的是,在document表中,保存的是:

前端
    |———前端基础
            |————HTML标签
            |————CSS

中的HTML标签、CSS。这一层,但是,实际上的任务要求是:

前端
    |———前端基础
            |————HTML标签
            |————CSS
//上面都是 courses 表中的数据

前端
    |———前端基础
            |————HTML标签
                    |—————a 标签
                    |—————p 标签
//其中的a 标签 和 p 标签才是 document 表中的内容

之前的字段内容是:

  • documents_id 主键
  • documents_name 文档名称 如 HTML标签、HTML5、CSS、CSS3
  • documents_points 文档分数
  • courses_id

重新设计的 document 表字段

遇到的问题

递归课程列表的时候,实际上只需要显示那些没有子节点的课程:

前端
    |———前端基础
            |————HTML标签
            |————CSS
//遍历显示的课程实际上是HTML标签和CSS,因为在在每个文档详情页中,这是作为标题显示

在实际编码的过程中,遇到了两个问题:

一、 递归的时候,一直显示调用未定义函数

//递归文档类
<?php
class DocumentTree extends Base
{

    static function treedoc($id)
    {

        $sql = "select * from courses where courses_fid= $id";
        $rs = Base::getMutiRs($sql);
        $rows = count($rs);
        if ($rows> 0) {
            for($i = 0; $i < count($rs); $i++ ){
                echo "b";
                echo "<br>";
                var_dump($rs[$i]['courses_id']);
                echo "<br>";
                echo "<br>"."a";
                treedoc($rs[$i]['courses_id']);
            }
         }
        else {
            for($i = 0; $i < count($d_rs); $i++ ){
                ?>
                <article>
                    <div class="summary" ><?php echo $d_rs[$i]['document_name'] ?></div>
                    <div class="property">
                        <span><?php echo $d_rs[$i]['document_points'].'分' ?></span>
                        <span><?php echo $d_rs[$i]['document_desc'] ?></span>
                    </div>
                </article>      
                <?php
            }
        }
    }
}

?>

//文档列表页调用:  

Document::treedoc(160);  

然后,我换了种方式:
不用类名调用静态方法的方式,而是直接把递归函数写在 document.php 中
在需要遍历课程的地方直接调用递归函数

//递归函数
<?php   
    function treedoc($id)
    {
        $sql = "select * from courses where courses_fid= $id";
        $rs = Base::getMutiRs($sql);
        $rows = count($rs);
        if ($rows> 0) {
            // echo "$rows".'<br>';
            // static $k = 1;
            for($i = 0; $i < count($rs); $i++ ){
                treedoc($rs[$i]['courses_id']);
                if ($rows) {
                    // echo "<br>";
                    // var_dump($rows);
                    // echo "$rows";
                    // echo "<br>";
                    ?>
                    <article>
                        <div class="summary" ><?php echo $rs[$i]['courses_name'] ?></div>
                        <div class="property">
                            <span><?php echo $rs[$i]['courses_points'].'分' ?></span>

                        </div>
                    </article>      
                    <?php
                }
            }
        }
        // else {
        //     $k =0;
        // }
    }

 ?>

 //调用递归

 <section class="frontEnd">

 <?php   
     treedoc(160);
  ?>
 </section> 

二、 递归显示的结果不是预期的结果

本来应该显示的只有没有子节点的课程,但是,目前上一级节点也显示出来了

相关文章推荐: