获取类别的半树:不使用mySql中的连接查询

时间:2015-08-02 08:51:49

标签: php mysql

我想从Category表中获取 Half Tree 类别。

mySql代码:

CREATE TABLE IF NOT EXISTS `category` (
  `cat_id` int(11) NOT NULL AUTO_INCREMENT,
  `parent_id` int(11) NOT NULL,
  `cat_name` varchar(255) NOT NULL,
  PRIMARY KEY (`cat_id`)
) ENGINE=InnoDB  DEFAULT CHARSET=latin1 AUTO_INCREMENT=8 ;

INSERT INTO `category` (`cat_id`, `parent_id`, `cat_name`) VALUES
(1, 0, 'sadasd'),
(2, 0, 'fsdfsadf'),
(3, 1, 'fasdfasd'),
(4, 1, 'ewrwer'),
(5, 4, 'cxzxczxc'),
(6, 5, 'sadasdqwqwqw'),
(7, 2, 'sadasd');

问题:

我希望获得cat_id为1的类别的层次结构。

不使用加入查询仅使用1个查询不使用任何php循环

如果您想更改数据库结构,则可以更改它。

我想要这样的输出:

cat_id 1
 - cat_id 3
 - cat_id 4
   - cat_id 5
     - cat_id 6

2 个答案:

答案 0 :(得分:1)

经过艰苦的努力,最终得到了这个问题的解决方案。

  

mySql代码:

CREATE TABLE IF NOT EXISTS `category` (
  `cat_id` int(11) NOT NULL AUTO_INCREMENT,
  `parent_id` int(11) NOT NULL,
  `cat_name` varchar(255) NOT NULL,
  `parentids` varchar(255) NOT NULL,
  PRIMARY KEY (`cat_id`)
) ENGINE=InnoDB  DEFAULT CHARSET=latin1 AUTO_INCREMENT=8 ;

INSERT INTO `category` (`cat_id`, `parent_id`, `cat_name`, `parentids`) VALUES
(1, 0, 'sadasd', ''),
(2, 0, 'fsdfsadf', ''),
(3, 1, 'fasdfasd', '|1|'),
(4, 1, 'ewrwer', '|1|'),
(5, 4, 'cxzxczxc', '|1|,|4|'),
(6, 5, 'sadasdqwqwqw', '|1|,|4|,|5|'),
(7, 2, 'sadasd', '|2|');

在sql查询之后创建此表。

select * from category where parentids LIKE "%|1|%";

答案 1 :(得分:0)

在SQL中使用父/子(cat_id,parent_id)是不可能的。 您必须在Framework / Code-Area中使用递归函数执行此操作。

如果要使用SQL执行此操作,可以尝试“嵌套集模型”:

php / Mysql best tree structure