mysql 数据库分类设计常用方法
2013-06-08 17:51
363 查看
以下内容来自:http://yut-i.blog.163.com/blog/static/24257782200862852022422/ 修改版本
以下为全路径分类法;
以下内容来自:http://yut-i.blog.163.com/blog/static/24257782200862852022422/ 修改版本
// 数据库 lin3615,表 cates,以下为表结构和连接信息 /* create table cates ( id int(11) unsigned auto_incrment primary key, pid int(10) unsigned, catename varchar(100), cateorder int(10), createdate date ) INSERT INTO `cates` (`id`, `pid`, `catename`, `cateorder`, `createtime`) VALUES (1, 0, '新闻', NULL, NULL); INSERT INTO `cates` (`id`, `pid`, `catename`, `cateorder`, `createtime`) VALUES (2, 0, '图片', NULL, NULL); INSERT INTO `cates` (`id`, `pid`, `catename`, `cateorder`, `createtime`) VALUES (3, 1, '国内新闻', NULL, NULL); INSERT INTO `cates` (`id`, `pid`, `catename`, `cateorder`, `createtime`) VALUES (4, 1, '国际新闻', NULL, NULL); INSERT INTO `cates` (`id`, `pid`, `catename`, `cateorder`, `createtime`) VALUES (5, 3, '省份新闻', NULL, NULL); INSERT INTO `cates` (`id`, `pid`, `catename`, `cateorder`, `createtime`) VALUES (6, 4, '欧洲新闻', NULL, NULL); INSERT INTO `cates` (`id`, `pid`, `catename`, `cateorder`, `createtime`) VALUES (7, 2, '人物图片', NULL, NULL); INSERT INTO `cates` (`id`, `pid`, `catename`, `cateorder`, `createtime`) VALUES (8, 2, '风景图片', NULL, NULL); INSERT INTO `cates` (`id`, `pid`, `catename`, `cateorder`, `createtime`) VALUES (9, 7, '欧洲明星', NULL, NULL); INSERT INTO `cates` (`id`, `pid`, `catename`, `cateorder`, `createtime`) VALUES (10, 9, '英国明星', NULL, NULL); */ $db_host = 'localhost'; $db_user = 'root'; $db_password = '123456'; $db_name = 'lin3615'; $link = mysql_connect($db_host, $db_user, $db_password) or die('Error:'.mysql_error()); mysql_select_db($db_name, $link); mysql_query("set names utf8",$link); function getList($pid=0, &$result = array()) { global $link; $sql = "select * from cates where pid = {$pid}"; $res = mysql_query($sql, $link); while($row = mysql_fetch_assoc($res)) { //$row['catename'] = $row; $result[] = $row; getList($row['id'],$result); } return $result; } $res = getList(0); //print_r($res); /* 结果形式为 array[0] = array( id => 1, pid => 0, catename => 新闻 ) array[1] =array( id = 3, pid => 1, catename => 国内新闻 .... ) array[2] = array( id => 5, pid => 3, catename => 省份新闻 ) array[3] = array( id => 4, pid => 1, catename => 国际新闻 ) array[4] = array( id => 6, pid => 4, catename => 欧洲新闻 ) array[5] = array( id => 2, pid => 0, catename => 图片 ) array[6] = array( id => 7, pid => 2, catename => 人物图片 ) array[7] = array( id => 9, pid => 7, catename => 欧洲明星 ) array[8] = array( id => 10, pid => 9, catename => 英国明星 ) array[9] = array( id => 8, pid => 2, catename => 风景图片 ) ) */ // 分类全路径 function getCatePath($cid, & $arr = array()) { global $link; $sql = "select * from cates where id = {$cid}"; $res = mysql_query($sql, $link); $row = mysql_fetch_assoc($res); if($row) { $arr[] = $row; getCatePath($row['pid'],$arr); } //krsort($arr); return $arr; } $cates = getCatePath(10); krsort($cates); print_r($cates); /* 结果: array[3] = array( id => 2, pid => 0, catename => 图片 ) array[2] = array( id => 7, pid => 2, catename => 人物图片 ) array[1] = array( id => 9, pid => 7, catename => 欧洲明星 ) array[0] = array( id => 10, pid => 9, catename => 英国明星 ) */
以下为全路径分类法;
/* 数据表:其中数据库名为 test create table cate( id int(11) not null auto_increment primary key, parent_id int(4) not null default '0', path varchar(200) not null default '1', name varchar(200) not null ); 数据库连接信息: */ $link = mysql_connect('主机名','用户名','密码') or die('Can not connect'); mysql_select_db('test'); mysql_query('set names utf8', $link); //1.增加分类: $p = $_POST['vv']; // 为传递过来的值 $name = '我的测试'; $sql = "select max(id) as maxid from cate"; $r = mysql_query($sql); $rr = mysql_fetch_assoc($r); $maxid = implode(',',$rr); $maxid += 1; if($p != 0) { $sql1 = "select path from cate where id='{$p}'"; $r1 = mysql_query($sql1); $rr1 = mysql_fetch_assoc($r1); $path = implode(',', $rr1); $path .= ','.$maxid; $query = "insert into cate(`parent_id`,`path`,`name`) values ('{$p}','{$path}', '{$name}')"; mysql_query($query); } else { $query = "insert into cate(`parent_id`,`path`,`name`) values ('{$p}','{$maxid}', '{$name}')"; mysql_query($query); } /* 2.编辑分类 具体思路是: 1.查找出传递过来的ID中纪录里面 path 的字段值; (保存为 $x_path_old) 2.判断传递过来 parent_id 的值(就是传递过来要修改的 parent_id 值) 如果 不为 0 查找 ID 值为 传递过来的 ID纪录中 parent_id 的值,并取出其中的 path 字段值:(x_parent_path) 设置 $x_path_new = concat($x_parent_path,',',$_id) (把传递的 id 值,即就是要编辑的 分类的ID 添加到其父级的 path 字段中去) 如果 为 0 设置 $x_path_new = $_id(传递过来的 id 值); 3. 更新相关数据 代码如下: */ $sql = "select path from cate where id=$_POST['id']"; $res = mysql_query($sql); $row = mysql_fetch_assoc($res); $arr[] = $row['path']; $x_path_old = implode(',', $arr); if($_POST['parent_id'] != 0) { $query = "select path from cate where id=$_POST['parent_id']"; $res = mysql_query($query); $row = mysql_fetch_assoc($res); $arr[] = $row['path']; $x_parent_path = implode(',', $arr); $x_path_new = $x_parent_path . ',' . $_POST['id']; } else { $x_path_new = $_POST['id']; } $querys = update `cate` set name=$_POST['name'], parent_id=$_POST['parent_id'] where id=$_POST['id']; $queryss = update set path = $_path_new where path = $x_path_old; mysql_query($querys) mysql_query($queryss); //3.取出所有分类 $sql1 = "select * from cate order by path"; $result = mysql_query($sql1); while($row = mysql_fetch_assoc($result)) { $len = strlen($row['path']); for($i = 0; $i<$len; $i++){ echo " "; } echo $row['name']."<br />"; } //4.取单个分类 $sql2 = "select * from cate where id=$_POST['id']"; $result = mysql_query($sql2); while($row = mysql_fetch_assoc($result)) { echo $row['name']; } //5.取出同一级分类 $sql3 = "select * from cate where parent_id = (select parent_id from cate where id=$_POST['id'])"; $result = mysql_query($sql3); while($row = mysql_fetch_assoc($result)) { print_r($row); } //6.得到一个分类的路径 $sql4 = "select path from cate where id=$_POST['id']"; $res = mysql_query($sql4); $paths = mysql_fetch_assoc($res); $arr = explode(',',$paths['path']); $a = array(); foreach($arr as $v) { $sql = "select * from cate where id = ('{$v}')"; $re = mysql_query($sql); $arrs = mysql_fetch_assoc($re); $a[] = $arrs; } foreach($a as $v) { print_r($v); }
以下内容来自:http://yut-i.blog.163.com/blog/static/24257782200862852022422/ 修改版本
相关文章推荐
- mysql 索引概念及其分类、使用及设计方法
- PHP+Mysql树型结构(无限分类)数据库设计的2种方式实例
- MYSQL常用查命令 分类: 数据库 2010-09-28 13:57 513人阅读 评论(2) 收藏
- Mysql 数据库常用备份方法和注意事项
- PHP+Mysql树型结构(无限分类)数据库设计的2种方式实例
- Mysql 数据库常用备份方法和注意事项
- PHP+Mysql树型结构(无限分类)数据库设计的2种方式实例
- mysql 远程连接数据库的方法以及常用命令(转)
- .net连接数据库mysql常用方法
- mysql 远程连接数据库的方法以及常用命令(转)
- Mysql学习笔记——MySql导入导出数据库常用方法
- golang github.com/go-sql-driver/mysql 遇到的数据库,设置库设计不合理的解决方法
- 常用数据库的自增字段创建方法汇总_DB2_Oracle_MySQL_PostgreSQL_SQL Server_Sybase
- Ecmall MySql 数据库调用的常用方法
- MySQL常用命令 MySQL处理数据库和表的命令
- 17.笔记 MySQL学习——MYSQL常用操作命令数据库相关
- Mysql常用命令七(MySQL的优化方法)
- ASP无限级分类原理、数据库结构设计、应用及相关函数
- mysql、sqlserver、db2、oracle、hsql数据库获取数据库连接方法及分页函数