相同的信息字段相同,各异的信息都放在一个字段里如content,里面放的是序列化后的数组,如

解决方案 »

  1.   

    但是如果每个分类都新建立一个附加表的话,我认为不太合理这样没什么问题,你写的是cms,每个分类可看作是一个相对独立的模块了,独立表是正常的,如果一个表数据多,同样的分类拆成几个表也是可能的
      

  2.   

    大概意思是这样:
    Name field1  field2 field3 type
    房屋  var1   var1   var1  hourse
    汽车  var1   var1   var1  car
    自行车  var1   var1   var1  bike通过type取得不同的结果,二每个字段的类型通过业务层去进行转化,conver函数再说的简单些,你让数据库的数据类型是若类型,好比javascript,通过对业务对象处理来编程强类型即可当然,你要保证字段足够,当然这要看你程序而定了,我说的是大概思路,明白即可!
      

  3.   

    100多个字段,那就再多加一个字段了,大概意思是这样:
    Name val    type  fileName
    房屋  var1  var1   房子大小
    房屋  var2  var1  房子面积
    房屋  var3  var1  房子其他
    汽车  var11  var1  汽车大小
    汽车  var11  var1  汽车价格
    ………………
      

  4.   

    第一:我感觉楼主的各个类别之间没有直接联系,可以分成独立表。
    第二:如果楼主想通过一个主表来调用其它的附加表就必须添加private key,然后调用。
      

  5.   


    T_1:分类共有字段。id,title,description等等。
    T_2:分类附加字段。id,class_id,name,type[input,textarea.....] //T_2.class_id<--T_1.id  T_1,T_2之间可以做个表连接他们,那样就可以让附加字段属于多个分类。
    T_3:内容附加字段数据表。article_id,extra_id,value  //T_3.extra_id<--T_2.id   数据多了可以分表嘛要不你看看php168的内容分类系统。
      

  6.   

    <?php
    //无限分类类
    class sortClass
    {
    /*
    getTree();返回排序好的节点数组,每个节点的深度已经整理好了
    getList($root,$self);//获取指定节点下面的子节点,$root指节点id,self指是否包括自身节点id,0为不包括,默认为1
    getList(0,0)获取所有节点,不包括“顶级节点”,因为顶级节点没有存放到lineRs数组当中去,一般也用不到
    其它情况正常使用
    getPosition($id,$self=1);返回当前位置,默认包括自己
    getRootFid($id)//获取当前分类的最顶级分类id
    */
    public $child = array();
    public $parent = array();
    public $name = array();
    public $lineRs = array();//行记录
    function __construct($sql)//构造函数
    {
    global $db;
    $this->setNode(0, -1, '顶极节点');
    $result = $db->query($sql);
    foreach($result as $val)
    {
    $this->lineRs[$val["id"]] = $val;
    $this->setNode($val["id"],$val["fid"]);
    }
    $this->initDepth();
    }
    function getTree()
    {
    return $this->lineRs;//构造函数返回初始化好的节点数组
    }
    function setNode($id,$parent)
    {
    $this->child[$parent][] = $id;
    $this->parent[$id] = $parent;
    }
    function initDepth($root=0,$depth=0)//初始化节点深度
    {
    if (!isset($this->child[$root])) return;
    foreach ($this->child[$root] as $key=>$id)
    {
    $this->lineRs[$id]["depth"] = $depth;
    if (isset($this->child[$id]))
    {
    if ($this->child[$id]) $this->initDepth($id,$depth+1);
    }
    }
    }
    function getList($root=0,$self=1)
    {
    $tree = array();
    if($self == 1)
    {
    $tree[] = $root;
    }
    $this->getList_1($root,$tree);
    return $tree;
    }
    function getList_1($root,&$tree)
    {
    if (!isset($this->child[$root])) return;
    foreach ($this->child[$root] as $key=>$id)
    {
    $tree[] = $id;
    if (isset($this->child[$id]))
    {
      $this->getList_1($id,$tree);
    }
    }
    }
    function getPosition($id,$self=1)
    {
    $position = array();
    if($self == 1)
    {
    $position[] = $id;
    }
    while($this->parent[$id] != 0)
    {
    $id = $this->parent[$id];
    $position[] = $id;
    }
    //return implode(array_reverse($position)," → ");
    return array_reverse($position);
    }
    function getRootFid($id)
    {
    while($this->parent[$id] != 0)
    {
    $id = $this->parent[$id];
    }
    return $id;
    }
    }
    //使用方法
    //include("include.php");
    //$sql = "select * from aa order by orderId asc,id asc";
    //$sort = new sortClass($sql);
    //$tree = $sort->getTree();
    //$childes = $sort->getList(0,0);
    //foreach($childes as $key=>$id)
    //{
    // echo str_repeat("-",$tree[$id]["depth"]) . $tree[$id]["name"] . "<br>";
    //}
    //echo "<hr>";
    //$postion = $sort->getPosition(5);
    //foreach($postion as $key=>$id)
    //{
    // echo $tree[$id]["name"] . " -> ";
    //}
    ?>