ORDER BY を使用して SQL ソートクエリを作成したいと考えています。結果を LIMIT キーワードと OFFSET キーワードで分割して、単一ページを照会した後に 10 項目を表示するようにしました。問題は、すべてのクエリで分割された (およびオフセットされた) 10 個の結果だけでなく、一致したすべての行に ORDER BY を使用する必要があることです。私のスクリプトでは、データを 2 つのカテゴリにグループ化する必要があるため、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 件のみです。クエリが一致する場合。常に 10 行ごとに 100 行が AZ 順に並べ替えられます。これは私が望むものではありません。それを達成する方法はありますか?
たぶん、一致したすべての行を取得してから、PHP関数で分割してソートする必要がありますか?