免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 2198 | 回复: 4
打印 上一主题 下一主题

一条查询语句,一个递规搞定一个无限分类. [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2005-04-02 17:37 |只看该作者 |倒序浏览

  1. <?PHP
  2. /**
  3. * 一个无限制分类例子
  4. * @author jack <warmsun@163.com>;
  5. */

  6. /*
  7. * 创建class数据表
  8. CREATE TABLE `class` (
  9. `ID` int(10) unsigned NOT NULL auto_increment,
  10. `ParentID` int(10) unsigned NOT NULL default '0',
  11. `Name` varchar(50) NOT NULL default '',
  12. KEY `class_id` (`ID`)
  13. ) TYPE=MyISAM AUTO_INCREMENT=11 ;

  14. #
  15. # 无限制分类表 `claas`中的数据
  16. #


  17. INSERT INTO `class` VALUES (1, 0, '世界');
  18. INSERT INTO `class` VALUES (2, 1, '中国人民共和国');
  19. INSERT INTO `class` VALUES (3, 1, '美国');
  20. INSERT INTO `class` VALUES (4, 1, '俄罗斯');
  21. INSERT INTO `class` VALUES (5, 2, '北京市');
  22. INSERT INTO `class` VALUES (6, 2, '海淀区');
  23. INSERT INTO `class` VALUES (7, 2, '朝阳区');
  24. INSERT INTO `class` VALUES (8, 6, '车道沟');
  25. INSERT INTO `class` VALUES (9, 4, '莫斯科');
  26. INSERT INTO `class` VALUES (10, 6, '小煤厂');
  27. INSERT INTO `class` VALUES (11, 6, '佟家坟');
  28. INSERT INTO `class` VALUES (12, 6, '四季青桥');
  29. */
  30. mysql_connect('localhost', 'root', '');
  31. mysql_select_db('test');

  32. $sql = 'SELECT * FROM class';
  33. $result = mysql_query($sql);

  34. //将父类id相同的分类合并,产生二维数组$array
  35. while ($row = mysql_fetch_array($result)) {
  36.         $array[$row['ParentID']][$row['ID']] = array ('id' =>; $row['ID'], 'parent' =>; $row['ParentID'], 'name' =>; $row['Name']);
  37. }

  38. /**
  39. * @return String           //返回一个字符串
  40. * @param int $category_id  //分类的id号
  41. * @param int $depth        //相对于根分类的深度
  42. * @desc 生成下拉选项
  43. */
  44. function genOption($id = 0, $depth = 0) {
  45.         global $array;
  46.         if (!$array[$id])
  47.                 return;
  48.         foreach ($array[$id] AS $key =>; $class) {
  49.                 echo '<option value="'.$class[id].'">;';
  50.                 echo str_repeat("&", $depth);
  51.                 echo ($depth) ? ('&'.$class['name']."</option>;\r\n") : ($class['name']."</option>;\r\n");
  52.                 genOption($key, $depth +1);
  53.         }
  54.         //如果一个文件要同时调用genOption两次,请注释下面一行.
  55.         unset ($array[$id]);
  56. }
  57. ?>;
  58. <select name="ClassID">;
  59. <?php

  60. echo genOption();
  61. ?>;
  62. </select>;


复制代码

论坛徽章:
1
荣誉会员
日期:2011-11-23 16:44:17
2 [报告]
发表于 2005-04-02 20:55 |只看该作者

一条查询语句,一个递规搞定一个无限分类.

无限分类!?
分100子类试过没?

论坛徽章:
0
3 [报告]
发表于 2005-04-04 09:50 |只看该作者

一条查询语句,一个递规搞定一个无限分类.

递归不是个好办法

论坛徽章:
0
4 [报告]
发表于 2005-04-05 17:56 |只看该作者

一条查询语句,一个递规搞定一个无限分类.

我的简单,不用数组,核心代码如下:
function sub($fid,$str){
  if(!$fid) $fid=0;
  $rs=mysql_query("select id,fid,cname from sort where fid=$fid order by id desc";
  if($r_s=mysql_fetch_array($rs)){
    do{echo $str.$r_s["cname"]."<br>;";
      sub($r_s["id"],"  ".$str);
    }while ($r_s=mysql_fetch_array($rs));
  }
}

echo sub(0,"  ";

论坛徽章:
0
5 [报告]
发表于 2005-04-05 19:47 |只看该作者

一条查询语句,一个递规搞定一个无限分类.

更耗资源。。。。。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP