无限极菜单显示,深切mysql外键关联难点的详解

By admin in 4858.com on 2019年2月3日

在付出品种当中,后台无限极菜单的显得是无可避免的,而且也很普遍。一般后台菜单也就是分为两级,最多三级,不过也有可能有数以万计。明天就做一个无限极菜单的已毕进程的笔录。

在支付品种当中,后台无限极菜单的来得是无可幸免的,而且也很广阔。一般后台菜单也就是分为两级,最多三级,可是也有可能有数以万计。前几天就做一个无限极菜单的兑现进程的笔录。

1.货物主表

明日一而再再看老师给推荐的长远浅出mysql数据库开发那本书,看到innodb数据库的外键关联难点时,蒙受了一个题材,书上写的是足以对父表举办修改,从而同步到子表的外键上去,然则自己的试行却是没有能够。

此间做的是:基于角色的访问控制(Role-Based Access
Control),在RBAC中,权限与角色相关联,用户通过成为万分角色的分子而得到那一个角色的权杖。那就大幅度地简化了权力的管住。在一个团伙中,角色是为着完毕各样办事而创办,用户则基于它的权责和身份来被选派相应的角色,用户可以很简单地从一个角色被派出到另一个角色。角色可依新的须要和系统的联结而予以新的权杖,而权力也可依据须要而从某角色中回收。角色与角色的涉嫌得以创建起来以囊括更普遍的客观景况。

此间做的是:基于角色的访问控制(Role-Based Access
Control),在RBAC中,权限与角色相关联,用户通过成为格外角色的分子而得到这么些角色的权柄。这就大幅度地简化了权力的管住。在一个团伙中,角色是为了成功各个办事而创办,用户则按照它的任务和身价来被派出相应的角色,用户可以很不难地从一个角色被派遣到另一个角色。角色可依新的须求和体系的统一而予以新的权能,而权力也可根据须求而从某角色中回收。角色与角色的涉及得以建立起来以囊括更普遍的客观景况。

CREATE TABLE  `wl_goods`(

`id`            mediumint(8)        unsigned        NOT NULL      
AUTO_INCREMENT,

`cat_id`    smallint(5)              unsigned        NOT NULL    
 DEFAULT    ‘0’    COMMENT    ‘分类id’, 

`goods_sn`   varchar(60)         NOT NULL     DEFAULT    ”    
 COMMENT      ‘商品货号’,

`goods_name`    varchar(120)    NOT NULL   DEFAULT    ”    COMMENT
   ‘商品名’,

`click_count`       int(10)           unsigned            NOT NULL
     DEFAULT    ‘0’     COMMENT   ‘浏览量’,

`brand_id`          smallint(5)         unsigned          NOT NULL
     DEFAULT   ‘0’     COMMENT   ‘品牌id’,

`suppliers_id`    varchar(100)              NOT NULL         
DEFAULT  ”          COMMENT    ‘供应商id’,

`market_price`          decimal(9,2)           unsigned            
 NOT NULL        DEFAULT       ‘0.00’       COMMENT   ‘市场价格’,

`shop_price`              decimal(9,2)            unsigned        
   NOT NULL        DEFAULT        ‘0.00’      COMMENT    ‘本店出售价格’,

`promote_price`        decimal(9,2)             unsigned          
  NOT NULL       DEFAULT       ‘0.00’     COMMENT    ‘让利价格’,

`promote_start_date`      timestamp            NOT NULL        
DEFAULT    CURRENT_TIMESTAMP    COMMENT    ‘让利初叶日期’,

`promote_end_date`      timestamp            NOT NULL         
DEFAULT    CURRENT_TIMESTAMP    COMMENT    ‘让利截至日期’,

`keywords`                        varchar(255)          NOT NULL    
   DEFAULT    ”        COMMENT     ‘商品首要字’,

`goods_brief`                   varchar(255)            NOT NULL  
     DEFAULT   ”       COMMENT    ‘商品简介’,

`goods_desc`                   text                          
 NOT NULL       COMMENT         ‘商品详情’,

`goods_img`              varchar(255)                NOT NULL     
  DEFAULT    ”      COMMENT      ‘商品图’ ,

`is_putaway`              tinyint(1)                     unsigned  
         NOT NULL         DEFAULT      ‘0’       COMMENT    
‘是或不是上架’,

`putaway_time`        timestamp          NOT NULL     
CURRENT_TIMESTAMP    COMMENT    ‘上架时间’,

`create_time`              timestamp        NOT NULL      DEFAULT 
  CURRENT_TIMESTAMP     COMMENT    ‘添加时间’,

`sort_order`              smallint(4)            unsigned         
      NOT NULL        DEFAULT  ‘100’        COMMENT    ‘排序’,

`is_delete`              tinyint(1)              unsigned         
      NOT NULL          DEFAULT  ‘0’      COMMENT    ‘是还是不是被剔除’,

`is_best`                tinyint(1)              unsigned         
      NOT NULL      DEFAULT      ‘0’      COMMENT    ‘精品’,

`is_new`                tinyint(1)            unsigned             
  NOT NULL          DEFAULT      ‘0’    COMMENT    ‘新品’,

`is_hot`                tinyint(1)              unsigned          
    NOT NULL        DEFAULT    ‘0’      COMMENT    ‘热销’,

`is_promote`       tinyint(1)             unsigned            
 NOT NULL          DEFAULT      ‘0’     COMMENT   ‘促销’,

`goods_for`      smallint(5)          unsigned            NOT NULL
DEFAULT    ‘0’      COMMENT    ‘商品归属于哪个活动’,

`give_integral`    int(11)            NOT NULL          DEFAULT    
  ‘-1’      COMMENT    ‘赠送积分’,

`rank_integral`    int(11)            NOT NULL        DEFAULT     
‘-1’    COMMENT    ‘赠送等级经验’,

‘rest_count’      mediumint(5)      NOT NULL    DEFAULT  ‘0’   
COMMENT    ‘库存’,

‘sell_count’      mediumint(5)    NOT NULL    DEFAULT  ‘0’   
COMMENT    ‘销量’,

PRIMARY KEY(`goods_id`),

KEY`goods_sn`(`goods_sn`),

KEY`cat_id`(`cat_id`),

KEY`brand_id`(`brand_id`),

KEY`promote_end_date`(`promote_end_date`),

KEY`promote_start_date`(`promote_start_date`),

KEY`goods_number`(`goods_number`),

KEY`sort_order`(`sort_order`)

)ENGINE=MyISAM  DEFAULT CHARSET=utf8

复制代码 代码如下:

先介绍下表结构:

先介绍下表结构:

2.货品扩张分类关系表(跟商品表为多对多的关联)

mysql> show create table country\G
*************************** 1. row
***************************
       Table: country
Create Table: CREATE TABLE `country` (
  `country_id` smallint(5) unsigned NOT NULL auto_increment,
  `country` varchar(50) NOT NULL,
  `last_update` timestamp NOT NULL default CURRENT_TIMESTAMP on
update CURRENT_TIMESTAMP,
  PRIMARY KEY  (`country_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8
1 row in set (0.01 sec)
mysql> show create table city\G
*************************** 1. row
***************************
       Table: city
Create Table: CREATE TABLE `city` (
  `city_id`无限极菜单显示,深切mysql外键关联难点的详解。 smallint(5) unsigned NOT NULL auto_increment,
  `city` varchar(50) NOT NULL,
  `country_id` smallint(5) unsigned NOT NULL,
  `last_update` timestamp NOT NULL default CURRENT_TIMESTAMP on
update CURRENT_TIMESTAMP,
  PRIMARY KEY  (`city_id`),
  KEY `country_id` (`country_id`),
  CONSTRAINT `city_ibfk_1` FOREIGN KEY (`country_id`) REFERENCES
`country` (`country_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8
1 row in set (0.00 sec)
mysql> select * from city;
+———+———-+————+———————+
| city_id | city     | country_id | last_update         |
+———+———-+————+———————+
|       1 | hancheng |          1 | 2012-01-09 09:18:33 |
+———+———-+————+———————+
1 row in set (0.01 sec)
mysql> select * from country;
+————+———+———————+
| country_id | country | last_update         |
+————+———+———————+
|          1 | chen    | 2012-01-09 09:16:38 |
+————+———+———————+

CREATE TABLE `sp_auth` (
`auth_id` smallint(5) unsigned NOT NULL AUTO_INCREMENT,
`auth_name` varchar(30) NOT NULL COMMENT ‘权限名称’,
`action_name` varchar(30) NOT NULL COMMENT ‘权限代码’,
`desc` varchar(120) NOT NULL DEFAULT ” COMMENT ‘权限描述’,
`pid` smallint(5) unsigned NOT NULL DEFAULT ‘0’ COMMENT
‘上级权限ID’,
`sort_id` smallint(5) unsigned NOT NULL DEFAULT ‘0’ COMMENT
‘权限排序值’,
`add_time` int(11) unsigned NOT NULL DEFAULT ‘0’ COMMENT
‘添加时间’,
`update_time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE
CURRENT_TIMESTAMP COMMENT ‘更新时间’,
`is_delete` tinyint(1) unsigned NOT NULL DEFAULT ‘0’ COMMENT
‘是或不是删除(0 未删减 | 1 已删除)’,
PRIMARY KEY (`auth_id`),
UNIQUE KEY `action_name` (`action_name`),
KEY `pid` (`pid`),
KEY `add_time` (`add_time`),
KEY `is_delete` (`is_delete`),
KEY `controller_name` (`controller_name`(6)),
KEY `auth_name` (`auth_name`(16)),
KEY `sort_id` (`sort_id`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8 COMMENT=’权限表’;

CREATE TABLE `sp_auth` (
`auth_id` smallint(5) unsigned NOT NULL AUTO_INCREMENT,
`auth_name` varchar(30) NOT NULL COMMENT ‘权限名称’,
`action_name` varchar(30) NOT NULL COMMENT ‘权限代码’,
`desc` varchar(120) NOT NULL DEFAULT ” COMMENT ‘权限描述’,
`pid` smallint(5) unsigned NOT NULL DEFAULT ‘0’ COMMENT
‘上级权限ID’,
`sort_id` smallint(5) unsigned NOT NULL DEFAULT ‘0’ COMMENT
‘权限排序值’,
`add_time` int(11) unsigned NOT NULL DEFAULT ‘0’ COMMENT
‘添加时间’,
`update_time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE
CURRENT_TIMESTAMP COMMENT ‘更新时间’,
`is_delete` tinyint(1) unsigned NOT NULL DEFAULT ‘0’ COMMENT
‘是不是删除(0 未删减 | 1 已删除)’,
PRIMARY KEY (`auth_id`),
UNIQUE KEY `action_name` (`action_name`),
KEY `pid` (`pid`),
KEY `add_time` (`add_time`),
KEY `is_delete` (`is_delete`),
KEY `controller_name` (`controller_name`(6)),
KEY `auth_name` (`auth_name`(16)),
KEY `sort_id` (`sort_id`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8 COMMENT=’权限表’;

CREATE TABLE  `wl_goods_cat`(

`goods_id`     mediumint(8)      unsigned       NOT NULL    
DEFAULT    ‘0’,

`cat_id`           smallint(5)           unsigned       NOT NULL  
  DEFAULT    ‘0’,

PRIMARY KEY(`goods_id`,`cat_id`)

)ENGINE=MyISAM     DEFAULT CHARSET=utf8

复制代码 代码如下:

处理的措施:

拍卖的不二法门:

3.属性表

mysql> update country set country_id=100 where country_id=1;
ERROR 1451 (23000): Cannot delete or update a parent row: a foreign key
constraint fails (`test/city`, CONSTRAINT `city_ibfk_1` FOREIGN
KEY (`country_id`) REFERENCES `country` (`country_id`))

//打印无限极树形结构菜单展示
    function _reSorts($data, $pid=0)
    {
        $ret = array();
        foreach ($data as $k => $v) {
            if($v['pid'] == $pid) {
                $v['children'] = _reSorts($data, $v['auth_id']);
                $ret[] = $v;
            }
        }
        return $ret;
    }
//打印二级菜单的方法

function getMenuShow($data)
{
    $ret = array();
    if (!is_array($data)) {
        return false;
    }
    foreach ($data as $key => $val) {
        if ($val['pid'] == 0) {
            //再次遍历,将第二级别的放在作为其子菜单
            foreach ($data as $k => $v) {
                if ($v['pid'] == $val['auth_id']) {
                    $val['children'][] = $v;
                }
            }
            $ret[] = $val;
        }
    }
    return $ret;
}
//打印无限极树形结构菜单展示
    function _reSorts($data, $pid=0)
    {
        $ret = array();
        foreach ($data as $k => $v) {
            if($v['pid'] == $pid) {
                $v['children'] = _reSorts($data, $v['auth_id']);
                $ret[] = $v;
            }
        }
        return $ret;
    }
//打印二级菜单的方法

function getMenuShow($data)
{
    $ret = array();
    if (!is_array($data)) {
        return false;
    }
    foreach ($data as $key => $val) {
        if ($val['pid'] == 0) {
            //再次遍历,将第二级别的放在作为其子菜单
            foreach ($data as $k => $v) {
                if ($v['pid'] == $val['auth_id']) {
                    $val['children'][] = $v;
                }
            }
            $ret[] = $val;
        }
    }
    return $ret;
}

CREATE    TABLE  `wl_attribute` (

`id`     smallint(5)      unsigned       NOT NULL      
AUTO_INCREMENT,

`type_id`    smallint(5)      unsigned        NOT NULL     
DEFAULT      ‘0’    COMMENT    ‘商品连串id’,

`attr_name`  varchar(60)      NOT NULL    DEFAULT    ”    COMMENT
   ‘属性项名’,

`attr_input_type`    tinyint(1)  unsigned      NOT NULL   
DEFAULT    ‘1’        COMMENT    ‘属性类型,唯一性,单选,复选’,

`attr_values`  text      NOT NULL  COMMENT    ‘属性值,用“,”间隔’,

`attr_index`  tinyint(1)      unsigned        NOT NULL     
DEFAULT    ‘0’    COMMENT    ‘是还是不是可以进行筛选’,

PRIMARY KEY (`id`),

KEY `type_id` (`type_id`)

) ENGINE=MyISAM   DEFAULT CHARSET=utf8

地方的问题是说因为有提到的存在,所以无法改变country_id这么些字段。
然后自己又重新看了下书本,发现自己的sql语句中并未innodb的外键约束措施(cascade,set
null,no action,restrict),感觉那就是温馨出题目标地点。
不过怎么进入关联方式吗,上网找了好半天也未曾适合的艺术。就和好找呗,就透过名师说的方式,?
help一点儿点儿总算找到了怎么转移的方法,文档作用很强劲啊

这么就可见得到浮现的菜周到据。

如此那般就可见收获显示的菜单数据。

4.货品性质值表

复制代码 代码如下:

CREATE   TABLE  `wl_goods_attr`(

`id`   int(10)      unsigned         NOT NULL       AUTO_INCREMENT,

`goods_id`      mediumint(8)      unsigned          NOT NULL       
  DEFAULT      ‘0’      COMMENT    ‘商品id’,

`attr_id`            smallint(5)            unsigned          NOT
NULL          DEFAULT    ‘0’    COMMENT    ‘属性项id’,

`attr_value`      text          NOT NULL      COMMENT   
‘保存单个属性值’,

`attr_price`      smallint(5)      NOT NULL    DEFAULT  ‘0’   
COMMENT    ‘规格价格变动’,

PRIMARY KEY(`id`),

KEY`goods_id`(`goods_id`),

KEY`attr_id`(`attr_id`)

)ENGINE=MyISAM  DEFAULT CHARSET=utf8

| ADD {INDEX|KEY} [index_name] [index_type]
(index_col_name,…)
  | ADD [CONSTRAINT [symbol]]
        PRIMARY KEY [index_type] (index_col_name,…)
  | ADD [CONSTRAINT [symbol]]
        UNIQUE [INDEX|KEY] [index_name] [index_type]
(index_col_name,…)

5.商品类型表

写了后又是一大堆的谬误,无从下手啊

CREATE TABLE   `wl_goods_type`(

`id`      smallint(5)        unsigned          NOT NULL      
AUTO_INCREMENT,

`cat_name`    varchar(60)      NOT NULL       DEFAULT”,

`enabled`        tinyint(1)             unsigned      
 NOT NULL DEFAULT      ‘1’,

PRIMARY KEY(`id`)

)ENGINE=MyISAMAUTO_INCREMENT=11DEFAULT CHARSET=utf8

复制代码 代码如下:

6.商品分类表,添加分类时,可列出商品连串上面的可被索引到的习性项放至筛选属性中

mysql> alter table city add CONSTRAINT `city_ibfk_1` FOREIGN KEY
(`country_id`) REFERENCES `country` (`country_id`) ON UPDATE
CASCADE;
ERROR 1005 (HY000): Can’t create table ‘.\test\#sql-ed0_37.frm’
(errno: 121)
[email protected]:~$
perror 121
OS error code 121:  Remote I/O error
MySQL error code 121: Duplicate key on write or update
 
Can’t create table ‘test.icity’ (errno:
150)—–我那边也建立目录了。网上的传道是:字段类型和外键的目录

CREATE TABLE   `wl_category`(

`id`   smallint(5)         unsigned         NOT NULL      
 AUTO_INCREMENT,

`cat_name`        varchar(90)             NOT NULL        
 DEFAULT”,

`keywords`          varchar(255)           NOT NULL      
 DEFAULT”,

`cat_desc`         varchar(255)        NOT NULL        DEFAULT”,

`parent_id`          smallint(5)          unsigned          
 NOT NULL         DEFAULT  ‘0’,

`sort_order`         tinyint(1)          unsigned         NOT NULL
           DEFAULT   ’50’,

`show_in_nav`     tinyint(1)          NOT NULL          DEFAULT  
‘0’,

`is_show`               tinyint(1)         unsigned          
NOT NULL       DEFAULT   ‘1’,

`filter_attr`        varchar(255)       NOT NULL         DEFAULT  
  ‘0’   COMMENT  ‘属性项id,以逗号隔开’,

PRIMARY KEY(`id`),

KEY`parent_id`(`parent_id`)

)ENGINE=MyISAM   DEFAULT CHARSET=utf8

此处是双重树立一张表icity,结果可以了,计算可能是因为字段类型的难题,但是我的alter的题材或者没有缓解吗:

复制代码 代码如下:

mysql> create table icity(id int not null, city varchar(20),
country_id smallint unsigned not null , primary key(id), foreign
key(country_id) references country(country_id) on update cascade
)engine=innodb;
Query OK, 0 rows affected (0.11 sec)
mysql> show create table icity\G
*************************** 1. row
***************************
       Table: icity
Create Table: CREATE TABLE `icity` (
  `id` int(11) NOT NULL,
  `city` varchar(20) DEFAULT NULL,
  `country_id` smallint(5) unsigned NOT NULL,
  PRIMARY KEY (`id`),
  KEY `country_id` (`country_id`),
  CONSTRAINT `icity_ibfk_1` FOREIGN KEY (`country_id`) REFERENCES
`country` (`country_id`) ON UPDATE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=latin1
1 row in set (0.02 sec)

在大家(老师和网友)的鼎力相助下到底搞定了,做法先drop掉表里的外键,然后在add。呵呵……

复制代码 代码如下:

mysql> alter table city drop FOREIGN KEY `city_ibfk_1`;
Query OK, 0 rows affected (0.24 sec)
Records: 0  Duplicates: 0  Warnings: 0
mysql> alter table city add FOREIGN KEY (`country_id`) REFERENCES
`country` (`country_id`) ON UPDATE CASCADE;Query OK, 0 rows
affected (0.16 sec)
Records: 0  Duplicates: 0  Warnings: 0
mysql> show create table city\G
*************************** 1. row
***************************
       Table: city
Create Table: CREATE TABLE `city` (
  `city_id` smallint(5) unsigned NOT NULL AUTO_INCREMENT,
  `city` varchar(50) NOT NULL,
  `country_id` smallint(5) unsigned NOT NULL,
  `last_update` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON
UPDATE CURRENT_TIMESTAMP,
  PRIMARY KEY (`city_id`),
  KEY `country_id` (`country_id`),
  KEY `idx_fk_country_id` (`country_id`),
  CONSTRAINT `city_ibfk_1` FOREIGN KEY (`country_id`) REFERENCES
`country` (`country_id`4858.com ,) ON UPDATE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8
1 row in set (0.00 sec)

发表评论

电子邮件地址不会被公开。 必填项已用*标注

网站地图xml地图
Copyright @ 2010-2019 美高梅手机版4858 版权所有