我想达到的效果是:新闻等级分类 :--  子分类1,子分类2...数据库字段:
id(顶级分类ID,默认为0),parentid(子分类ID),name(顶级分类和子分类名称存储字段)我的php代码是:$toplist = array();
$query = mysql_query("SELECT id, parentid, name FROM nav  WHERE id =parentid");
while ($top = mysql_fetch($query)) {
$top['title'] = $top['name']." ";
$toplist[] = $top;
}//这段代码显示顶级分类
那么要在顶级分类后面显示它的多个子分类怎么做?
能给个具体代码吗?我大概知道是需要根据以上代码查询到的parentid=id,来循环。不过我不知道怎么写,呵呵.

解决方案 »

  1.   

    可以参考Discuz X1.5里面的表 pre_common_district ,三级分类的。
    SQL语句就不用写了吧。已知什么,得到什么,很容易查询到的。
      

  2.   


    --
    -- 表的结构 `pre_common_district`
    --CREATE TABLE IF NOT EXISTS `pre_common_district` (
      `id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT,
      `name` varchar(255) NOT NULL DEFAULT '',
      `level` tinyint(4) unsigned NOT NULL DEFAULT '0',
      `upid` mediumint(8) unsigned NOT NULL DEFAULT '0',
      PRIMARY KEY (`id`),
      KEY `upid` (`upid`)
    ) ENGINE=MyISAM  DEFAULT CHARSET=utf8 AUTO_INCREMENT=45052 ;--
    -- 转存表中的数据 `pre_common_district`
    --INSERT INTO `pre_common_district` (`id`, `name`, `level`, `upid`) VALUES
    (1, '北京市', 1, 0),
    (2, '天津市', 1, 0),
    (3, '河北省', 1, 0),
    (4, '山西省', 1, 0),
    (5, '内蒙古自治区', 1, 0),
    (6, '辽宁省', 1, 0),
    (7, '吉林省', 1, 0),
    (8, '黑龙江省', 1, 0),
    (9, '上海市', 1, 0),
    (10, '江苏省', 1, 0)
      

  3.   


    <?php/*mysql> desc pre_common_district;
    +-------+-----------------------+------+-----+---------+----------------+
    | Field | Type                  | Null | Key | Default | Extra          |
    +-------+-----------------------+------+-----+---------+----------------+
    | id    | mediumint(8) unsigned | NO   | PRI | NULL    | auto_increment |
    | name  | varchar(255)          | NO   |     |         |                |
    | level | tinyint(4) unsigned   | NO   |     | 0       |                |
    | upid  | mediumint(8) unsigned | NO   | MUL | 0       |                |
    +-------+-----------------------+------+-----+---------+----------------+
    4 rows in set (0.00 sec)*/
    //获取region数据
    function region_data_get($level = 0,$upid = 1,$autoContinue = 1){
      global $db;
      $level++;
      $REC = array();
      $sql = "select * from @#__region where level='$level' and upid='$upid' order by rid asc ";
      $query = $db->query($sql);
      while($rs = $db->fetch_array($query)){    //如果小于3的类型并且是自动获取下属分类,那么获取他的下属城市信息
        $rs['sub'] = ($rs['level'] < 3 && $autoContinue) ? region_cache_data_get($rs['level'],$rs['rid']):array();    $REC[$rs['rid']] = array(
                           'rid'  => $rs['rid'],
                           'name' => $rs['name'],
                           'sub'  => $rs['sub'],
                           );
        }
        return $REC;
      }
    // 开始执行
    $toplist = region_data_get(0,1,1);
    print_r($toplist);
      

  4.   

    把你的代码写成函数
    function tree($id) {
      $toplist = array();
      $query = mysql_query("SELECT id, parentid, name FROM nav WHERE parentid=$id");
      while ($top = mysql_fetch($query)) {
        $top['title'] = $top['name']." ";
        $toplist[] = $top;
      }
      return $toplist;
    }
    于是
    tree(0) 返回顶级分类
    tree(10) 返回id为 10 的一级子分类如果需要一次性返回某节点的全部子分类则修改函数为
    function tree($id) {
      $toplist = array();
      $query = mysql_query("SELECT id, parentid, name FROM nav WHERE parentid=$id");
      while ($top = mysql_fetch($query)) {
        $top['title'] = $top['name']." ";
        $top['child'] = tree($top['id']);
        $toplist[] = $top;
      }
      return $toplist;
    }
      

  5.   

    您好,我开始打的代码有点错误,我没把$id的获取写上去
    $query = mysql_query("SELECT id FROM nav WHERE parentid=0)也放在
    “function tree($id) {"下面吗?