0

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関数で分割してソートする必要がありますか?

4

1 に答える 1

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
于 2013-05-09T10:56:46.583 に答える