我想在 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 行按 AZ 排序 - 这不是我想要的。有没有办法做到这一点?
也许我应该获取所有匹配的行,然后使用 PHP 函数对其进行拆分和排序?