我似乎无法弄清楚如何在这个MySQL选择中订购。我希望你能帮助我。
Tabels:
类别
catId, catParentId, catDisplay
1 0 1
2 0 1
3 0 1
4 1 1
5 1 1
categories_translation
transId, catId, catName, catDesc, langId
1 1 Title1 Desc1 1
2 2 Title2 Desc2 1
3 3 Title3 Desc3 1
4 4 Title4 Desc4 1
5 5 Title5 Desc5 1
语言
langId, langName, langCode
1 Danish da
2 English en
我的查询:
SELECT `categories`.`catId`,
`categories`.`catParentId`,
`categories`.`catDisplay`,
`categories_translation`.`catName`,
`categories_translation`.`catDesc`,
`language`.`langCode`
FROM `categories`
INNER JOIN `categories_translation` ON `categories_translation`.`catId` = `categories`.`catId`
INNER JOIN `language` ON `language`.`langId` = `categories_translation`.`langId`
WHERE `language`.`langCode` = 'da'
现在,我得到了我想要的东西,但有没有办法将子类别命令给他们的父母,所以结果如下:
期望的结果:
catId | catParentId | catDisplay | catName | catDesc | langCode
1 0 1 Title1 Desc1 da
4 1 1 Title4 Desc4 da
5 1 1 Title5 Desc5 da
2 0 1 Title2 Desc2 da
3 0 1 Title3 Desc3 da
我尝试过顺序,但似乎可以得到我想要的结果。
答案 0 :(得分:2)
你不能得到你喜欢的结果,因为它不可能。我看不到允许按照你想要的方式订购的模式或id。
为什么标题4,标题5首先出现?
我看不出逻辑。也许这个例子不完整,也许CatName和CatDesc的顺序是你需要的关键。
答案 1 :(得分:2)
尝试以下方法:
ORDER BY
CASE WHEN categories.catParentId = 0 THEN
categories.catId
ELSE
categories.catParentId
END,
CASE WHEN categories.catParentId = 0 THEN
0
ELSE
categories.catId
END
对于那些没有得到排序的人来说,将更容易想到所需的结果:
catId | catParentId | orderingCategory
1 0 1.0
4 1 1.4
5 1 1.5
2 0 2.0
3 0 3.0
因此,它是一个类别层次结构,OP希望对结果进行排序,以便每个父类别后面跟着它们的子类别。
答案 2 :(得分:-3)
ORDER BY catParentID, catID, ...