【问题标题】:Tricky MySQL ORDER BY problem棘手的 MySQL ORDER BY 问题
【发布时间】:2011-05-07 12:43:42
【问题描述】:

我有下表:

id  title               parent_forum    depth
1   'Forum1'             0               0   
2   'Forum2'             0               0   
3   'Forum3'             0               0   
4   'Forum1 subforum'    1               0   
5   'Forum2 subForum'    2               0   
6   'Forum3 subForum'    3               0

我想做的是对行进行排序,以便所有子论坛都按其父论坛分组。所以,作为一个例子,我希望输出的顺序如下:

id  title               parent_forum    depth
1   'Forum1'             0               0
4   'Forum1 subforum'    1               0

2   'Forum2'             0               0  
5   'Forum2 subForum'    2               0
7   'Forum2 subForum2'   2               0

3   'Forum3'             0               0   
6   'Forum3 subForum'    3               0

(便于理解的空格) 一定有办法只使用 ORDER BY 和 GROUP BY 吗?如果没有,任何人都可以提供一个很好的查询来帮助我吗?

编辑:或者我的数据库结构很糟糕(我没有展示全部内容,但是你能看到的东西是垃圾吗?)

非常感谢,

詹姆斯

【问题讨论】:

  • 忘记包含您在寻找子论坛的订单类型?
  • 子论坛的 id 值是否可以小于其父论坛?
  • 可能,但不太可能 - 论坛和子论坛将通过表单添加,因此管理员可以创建所有顶级论坛,然后是子论坛,所以是的。感谢您的意见,但 Eric Petroelje 以一种非常简单的方式解决了这个问题(如下):)

标签: mysql group-by sql-order-by


【解决方案1】:

我认为这可以解决问题:

ORDER BY IF(parent_forum = 0,id,parent_forum), parent_forum

【讨论】:

  • 这很有魅力 - 非常感谢!这么简单的答案。我打算在一个循环中使用多个查询,但你刚刚节省了我的开销。这不会花太多时间,但我需要尽快完成。
  • @JamWaffles - 如果你可以有子论坛(超过两层深度),这可能行不通 - 我无法想象 ORDER BY 在我的脑海中会如何表现,所以你如果这在您的系统中实际上是可能的,我会想对其进行测试。
  • 此查询仅针对顶级登录页面。第二级以下的论坛(如我的 OP 中未涵盖的论坛)将位于单独的页面上,我将使用稍微不同的查询,同时考虑到所选子论坛的深度。我可能很快就会带着另一个线程回来寻求更多帮助! :P
猜你喜欢
  • 1970-01-01
  • 2012-03-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-07-09
  • 2015-09-16
  • 2012-12-11
  • 2016-03-10
相关资源
最近更新 更多