【问题标题】:Why is my MySQL query not ordering correctly?为什么我的 MySQL 查询没有正确排序?
【发布时间】:2016-06-25 05:07:46
【问题描述】:

在下面的查询中,我尝试按fc.order 升序排列结果:

SELECT *, count(*) AS threads_count FROM (
    SELECT fc.uuid AS category_uuid, fc.name, fc.description, fc.order, fc.icon,
           u.uuid AS user_uuid, u.username, u.avatar
    FROM forum_categories AS fc
    INNER JOIN forum_threads AS ft ON fc.id = ft.forum_category_id
    INNER JOIN users as u ON ft.created_by = u.id
    ORDER BY fc.order ASC, ft.created_at DESC
) AS tmp_table GROUP BY category_uuid

但它似乎不起作用。以下是上述查询的结果截图:

如何按order 列排序结果?

【问题讨论】:

  • 你的外部查询(产生最终结果的那个)没有ORDER BY
  • 必须添加第二条SELECT 声明。

标签: mysql sql rdbms


【解决方案1】:

好的,谢谢大家,但我明白了:

SELECT * FROM (
    SELECT *, count(*) AS threads_count FROM (
        SELECT fc.uuid AS category_uuid, fc.name, fc.description, fc.order, fc.icon,
               u.uuid AS user_uuid, u.username, u.avatar
        FROM forum_categories AS fc
        INNER JOIN forum_threads AS ft ON fc.id = ft.forum_category_id
        INNER JOIN users as u ON ft.created_by = u.id
        ORDER BY ft.created_at DESC
    ) AS t1 GROUP BY category_uuid
) as t2 ORDER BY `order`

【讨论】:

  • 这里不需要嵌套查询,它不仅使查询的可读性降低,而且对性能也有影响。 ORDER BY 在嵌套查询中也没有意义。
【解决方案2】:
SELECT t1.*, count(t1.*) AS threads_count FROM 
 (
        SELECT fc.uuid AS category_uuid, fc.name, fc.description, fc.order, fc.icon,
               u.uuid AS user_uuid, u.username, u.avatar
        FROM forum_categories AS fc
        INNER JOIN forum_threads AS ft ON fc.id = ft.forum_category_id
        INNER JOIN users as u ON ft.created_by = u.id    
 ) AS tmp_table t1 
GROUP BY category_uuid
ORDER BY t1.order ASC, t1.created_at DESC

【讨论】:

  • 您仍然需要嵌套查询的原因并不明显。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2010-10-30
  • 1970-01-01
  • 2019-09-30
  • 2021-12-31
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多