Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/78.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
MySQL二级菜单查询_Sql_Mysql_Menu - Fatal编程技术网

MySQL二级菜单查询

MySQL二级菜单查询,sql,mysql,menu,Sql,Mysql,Menu,我正在尝试执行一个MySQL请求来检索一个2级菜单(父菜单和子菜单) 当然,只有一张桌子: idCategory | Title | idCategoryParent | DisplayOrder 1 | cat1 | NULL | 1 2 | sub-cat1 | 1 | 1 3 | sub-cat2 | 1 | 2 4 |

我正在尝试执行一个MySQL请求来检索一个2级菜单(父菜单和子菜单)

当然,只有一张桌子:

idCategory | Title    | idCategoryParent | DisplayOrder
1          | cat1     | NULL             | 1
2          | sub-cat1 | 1                | 1
3          | sub-cat2 | 1                | 2
4          | cat2     | NULL             | 2
5          | sub-cat3 | 4                | 1
6          | sub-cat4 | 4                | 2
7          | cat3     | NULL             | 3
我正在寻找这些结果:

titleCat | titleSubCat | idCategory

cat1     | sub-cat1    | 1
cat1     | sub-cat2    | 1
cat2     | sub-cat3    | 4
cat2     | sub-cat4    | 4
cat3     | NULL        | 7
或者类似的事情也可以:

cat1     | null        | 1
cat1     | sub-cat1    | 1
cat1     | sub-cat2    | 1
etc..
我试过这样的方法:

SELECT subcat.title as catTitle, cat.title as parentTitle, subcat.idCategory as catIdCategory, subcat.idCategoryParent 
FROM `test_category` as cat
RIGHT OUTER JOIN test_category as subcat ON cat.idCategory=subcat.idCategoryParent
虽然效果不错,但我还是努力想订购唱片

如果您想尝试,下面是SQL转储:

--
-- Table structure for table `test_category`
--

CREATE TABLE IF NOT EXISTS `test_category` (
  `idCategory` int(11) NOT NULL AUTO_INCREMENT,
  `idCategoryParent` int(11) DEFAULT NULL,
  `title` varchar(20) NOT NULL,
  `order` int(11) NOT NULL,
  PRIMARY KEY (`idCategory`)
) ENGINE=InnoDB  DEFAULT CHARSET=utf8 AUTO_INCREMENT=8 ;

--
-- Dumping data for table `test_category`
--

INSERT INTO `test_category` (`idCategory`, `idCategoryParent`, `title`, `order`) VALUES
(1, NULL, 'cat1', 1),
(2, 1, 'sub-cat1', 1),
(3, 1, 'sub-cat2', 2),
(4, NULL, 'cat2', 2),
(5, 4, 'sub-cat3', 1),
(6, 4, 'sub-cat4', 2),
(7, NULL, 'cat3', 3);

谢谢!:)

您的查询几乎是正确的,但是如果您想要没有子类别的类别,您需要使用
LEFT JOIN
,并且您应该只从第一个表中选择第一级类别

SELECT t1.title, t2.title, t1.idCategory
FROM
    test_category t1
    LEFT JOIN test_category t2 ON t2.idCategoryParent=t1.idCategory
WHERE t1.idCategoryParent IS NULL
ORDER BY t1.DisplayOrder, t2.DisplayOrder

它应该按“DisplayOrder”排序,但它似乎也可以使用它!谢谢!:)哦,我按示例输出,它似乎是按标题排序的。