SQL Order By with LIMIT和OFFSET.一次对所有匹配的行进行排序



我想用ORDER BY的帮助创建SQL排序查询。我使用LIMIT和OFFSET关键字拆分结果,因此在查询单个页面后显示10个项目。问题是,我必须对所有匹配的行使用ORDER BY,而不仅仅是对每个查询中的拆分(和偏移)10个结果。在我的脚本中,我必须有数据分组在两个类别,所以我需要使用UNION。

:

SELECT * FROM (
    (SELECT n.name, n.id, n.type 
        FROM states AS n 
        WHERE
            n.lang = :lang AND 
                n.cat = 1
        ORDER BY
            n.id DESC
        LIMIT
            10 OFFSET :offset) 
        UNION 
        (SELECT n.name, n.id
        FROM states AS n 
        WHERE
            n.lang = :lang AND
                n.cat = 2
        ORDER BY
            n.id DESC
        LIMIT
            10 OFFSET :offset) 
    UNION) AS n ORDER BY n.type, n.name ASC

查看结果按名称ASC正确排序,但只有10个结果。如果查询匹配例如。100行每10行按A-Z排序,这不是我想要的。有什么办法可以做到吗?

也许我应该得到所有匹配的行,然后分割和排序它与PHP函数?

SELECT n.name, n.id, n.type 
  FROM states AS n 
 WHERE n.lang = :lang AND 
       n.cat IN (1, 2)
 ORDER BY n.type, n.name ASC
 LIMIT 10 OFFSET :offset

最新更新