API / Option

orderBy

Prisma クエリの並び順を指定するオプション。単一フィールド・複数フィールド・リレーション先フィールドを指定できる。

prismaquerysortdatabase
所属:Prisma Client

代表的な値 / 使い方

  • orderBy: { createdAt: 'desc' }
  • orderBy: [{ status: 'asc' }, { createdAt: 'desc' }]
  • orderBy: { author: { name: 'asc' } }

注意点 / Pitfalls

  • ·複数フィールドで並び替える場合は配列で渡す(オブジェクトの key 順は保証されない)
  • ·リレーション先フィールドで並び替えるとクエリが JOIN になりパフォーマンスに影響する場合がある
  • ·enum フィールドの並び順は DB の collation 依存

一緒に使う項目

補足

文字列 'asc' / 'desc' ではなく Prisma.SortOrder を使うと型安全になる。ページネーションと組み合わせる場合は必ず安定した一意なフィールド(id など)を最終ソートキーに追加する。

何をするオプションか

orderBy は Prisma クエリの結果の並び順を指定するオプションです。"asc"(昇順)または "desc"(降順)で並び替えます。

// 新着順
prisma.post.findMany({ orderBy: { createdAt: "desc" } });

どんな場面で使うか

  • 一覧ページで「新着順」「人気順」「アルファベット順」を切り替えるとき
  • ページネーションで、ページをまたいでもレコードの順序が崩れないようにしたいとき
  • リレーション先のフィールドや集計値でソートしたいとき

よくある組み合わせ

複数フィールドのソート(優先順位付き)

複数フィールドを指定する場合は配列で渡します。オブジェクトの key 順は JavaScript では保証されないため、配列を使います。

prisma.post.findMany({
  orderBy: [
    { viewCount: "desc" }, // まず viewCount の多い順
    { createdAt: "desc" }, // 同じ viewCount なら新着順
  ],
});

ページネーションとのセット使い

skip / take と組み合わせる場合は必ず orderBy を指定します。orderBy がないと DB がレコードを任意の順で返すため、ページをまたいで重複や欠落が生じる可能性があります。

prisma.post.findMany({
  where: { status: "published" },
  orderBy: { createdAt: "desc" },
  skip: (page - 1) * limit,
  take: limit,
});

リレーション先フィールドでソート

prisma.post.findMany({
  orderBy: { author: { name: "asc" } }, // 著者名順
});

注意点

  • ページネーションでは、ソートキーに一意なフィールド(id など)を最後に追加すると安定ソートになる。createdAt だけだと同一タイムスタンプのレコードで順序が変わる場合がある
  • リレーション先フィールドでのソートは JOIN を伴うためパフォーマンスに影響する場合がある
  • null 値の並び順は DB ごとにデフォルトが異なる。明示したい場合は { sort: "desc", nulls: "last" } のオブジェクト形式で指定する
  • enum フィールドの並び順は DB の collation に依存する

関連サンプルの見どころ

  • prisma-sort-query: 単一・複数・リレーション先フィールドのソートパターン一覧
  • prisma-pagination-query: orderBy + skip / take の安定ソートパターン
  • prisma-filter-query: where + orderBy を組み合わせたフィルタ付き一覧

関連ドキュメント

関連サンプル

同じテーマや技術スタックを使った実装例