php+mysql怎么实现无限级别分类,数据库怎么设计?只用一条SQL语句读出数据,怎么解决
+新闻-
|—国际新闻
|—国内新闻
+体育-
|—篮球
|—NBA
|--CBA
表格呈现模式,怎样实现
我说的是树状的无限分类,你说的那种方法我会。
向这样的
新闻
|----国内新闻-
|------ 体育新闻
|------CBA新闻
|-------足球新闻
                 |------八一队
第1个回答 2013-05-23
CREATE TABLE IF NOT EXISTS `sq_cat_id_name` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`fid` int(11) NOT NULL,
`cat_name` varchar(128) NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=24 ;
INSERT INTO `sq_cat_id_name` (`id`, `fid`, `cat_name`) VALUES
(1, 0, '私有'),
(2, 0, 'no2'),
(3, 1, 'sdf'),
(4, 1, '美媚'),
(5, 1, '好吧'),
(7, 1, '美女'),
(8, 1, '帅哥'),
(9, 2, '笑笑'),
(10, 2, '美女拉拉'),
(11, 2, '好好'),
(12, 2, '小小'),
(13, 5, '好呀'),
(14, 5, '媚美'),
(15, 5, '好S呀'),
(16, 5, '妖美'),
(17, 1, '好呀'),
(18, 12, '好吧'),
(19, 13, '是呀'),
(20, 12, 'okokok'),
(21, 13, '是虹蜡虹'),
(22, 2, '就是这样子'),
(23, 2, '是的吗');
<?php
$link = mysql_connect( '127.0.0.1', 'root', '123456' ) or die( mysql_error() );
mysql_select_db( 'qqsq' );
mysql_set_charset( 'utf8' );
$sql = "SELECT * FROM sq_cat_id_name";
$result = mysql_query( $sql );
$ss = array();
while( $row = mysql_fetch_assoc( $result ) )
{
$ss[$row['fid']][$row['id']] = $row['cat_name'];
}
unset( $row );
mysql_close( $link );
var_dump( $ss );
echo '-------------------------------------------' . "\n";
function for_category( $ss = array(), $a2 )
{
echo "<ul>";
foreach ( $ss as $k => $v )
{
if ( isset( $a2[$k] ) && is_array( $a2[$k] ) )
{ echo "<li>$k $v";
for_category( $a2[$k], $a2 );
echo "</li>";
}
else{
echo "<li>$k $v</li>";
}
}
echo "</ul>";
}
for_category( $ss[0], $ss );
如用疑问请联系 php.xlxz.org
`id` int(11) NOT NULL AUTO_INCREMENT,
`fid` int(11) NOT NULL,
`cat_name` varchar(128) NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=24 ;
INSERT INTO `sq_cat_id_name` (`id`, `fid`, `cat_name`) VALUES
(1, 0, '私有'),
(2, 0, 'no2'),
(3, 1, 'sdf'),
(4, 1, '美媚'),
(5, 1, '好吧'),
(7, 1, '美女'),
(8, 1, '帅哥'),
(9, 2, '笑笑'),
(10, 2, '美女拉拉'),
(11, 2, '好好'),
(12, 2, '小小'),
(13, 5, '好呀'),
(14, 5, '媚美'),
(15, 5, '好S呀'),
(16, 5, '妖美'),
(17, 1, '好呀'),
(18, 12, '好吧'),
(19, 13, '是呀'),
(20, 12, 'okokok'),
(21, 13, '是虹蜡虹'),
(22, 2, '就是这样子'),
(23, 2, '是的吗');
<?php
$link = mysql_connect( '127.0.0.1', 'root', '123456' ) or die( mysql_error() );
mysql_select_db( 'qqsq' );
mysql_set_charset( 'utf8' );
$sql = "SELECT * FROM sq_cat_id_name";
$result = mysql_query( $sql );
$ss = array();
while( $row = mysql_fetch_assoc( $result ) )
{
$ss[$row['fid']][$row['id']] = $row['cat_name'];
}
unset( $row );
mysql_close( $link );
var_dump( $ss );
echo '-------------------------------------------' . "\n";
function for_category( $ss = array(), $a2 )
{
echo "<ul>";
foreach ( $ss as $k => $v )
{
if ( isset( $a2[$k] ) && is_array( $a2[$k] ) )
{ echo "<li>$k $v";
for_category( $a2[$k], $a2 );
echo "</li>";
}
else{
echo "<li>$k $v</li>";
}
}
echo "</ul>";
}
for_category( $ss[0], $ss );
如用疑问请联系 php.xlxz.org
第2个回答 2009-04-19
你说的无限级别,不是树状无限吧,只是说类别的个数无限,级别只有两级,对吧
一般大类不会很多,可以使用一个字符来表示,例如用A~Z进行编码,A为新闻、B为体育、……
新闻的类别可以设置为字符类型,第一位表示大累,后面的表示小类,例如A001国际新闻、A002国内新闻、B001篮球、……
建立两个表,一个是新闻大类表,两个字段:大类代码、大类名称;另外一个类别表,也是两个字段:类别代码、类别名称
在你的新闻表里面,只使用一个字符类型的类别字段就可以了。
要产生你那样的树状目录输出,起始非常简单,只要你的SQL语句按照类别进行排序就行了,程序检测每一条数据是否和上面的类别相同,以确定前面是显示+还是|,仅此而已。
一般大类不会很多,可以使用一个字符来表示,例如用A~Z进行编码,A为新闻、B为体育、……
新闻的类别可以设置为字符类型,第一位表示大累,后面的表示小类,例如A001国际新闻、A002国内新闻、B001篮球、……
建立两个表,一个是新闻大类表,两个字段:大类代码、大类名称;另外一个类别表,也是两个字段:类别代码、类别名称
在你的新闻表里面,只使用一个字符类型的类别字段就可以了。
要产生你那样的树状目录输出,起始非常简单,只要你的SQL语句按照类别进行排序就行了,程序检测每一条数据是否和上面的类别相同,以确定前面是显示+还是|,仅此而已。