我想达到的效果是:新闻等级分类 :-- 子分类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,来循环。不过我不知道怎么写,呵呵.
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,来循环。不过我不知道怎么写,呵呵.
SQL语句就不用写了吧。已知什么,得到什么,很容易查询到的。
--
-- 表的结构 `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)
<?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);
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;
}
$query = mysql_query("SELECT id FROM nav WHERE parentid=0)也放在
“function tree($id) {"下面吗?