我想借助ORDER BY创建SQL排序查询。我使用LIMIT和OFFSET关键字拆分结果,因此在查询单页显示10项后。问题是我必须对所有匹配的行使用ORDER BY,而不仅仅是对每个查询中的splited(和offsetted)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函数对其进行拆分和排序?
答案 0 :(得分:1)
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