1

私のプロジェクトには、投稿、ユーザー、コメントの次のテーブルがあります。1 対多のコメントを投稿する、多対 1 のユーザーを投稿する。コメントとユーザーを含むすべての投稿を取得し、コメント数で並べ替えたい。最初の問題は不適切な制限でしたが、サブクエリでこれを修正しました。しかし、カウント クエリで投稿を並べ替えるにはどうすればよいでしょうか。

これは、scalikeJDBC での私の DSL 操作です。

   val x = SubQuery.syntax("x").include(v, p, u)
      DB readOnly { implicit session =>
        withSQL {
          select.all(p,u,v)
            .from(Post as p)
            .leftJoin(Vote as v)
            .on(p.postId, v.postId)
            .join(User as u)
            .on(p.userId, u.userId)
            .join{
              select(p.result.*,count(v.voteId))
                .from(Post as p)
                .leftJoin(Vote as v)
                .on(p.postId, v.postId)
                .join(User as u)
                .on(p.userId, u.userId)
                .groupBy(p.postId)
                .as(x)
            }.on(x(p).postId, p.postId)
        }
          .one(Post(p.resultName, u.resultName))
          .toMany(
            rs => Vote.opt(v)(rs),

          ).map{
          (p:Post,v:Seq[Vote])=> {
            p.copy(votes = v)
          }
        }.list.apply
      }

私はSQLでそれを行う方法を知っています:

SELECT * FROM blog.POSTS p LEFT JOIN BLOG.POST_VOTES pv  ON p.POST_ID = pv.POST_ID JOIN (SELECT p2.POST_ID as id, COUNT(pv2.VOTE_ID) "count" FROM BLOG.POSTS p2 LEFT JOIN BLOG.POST_VOTES pv2  ON p2.POST_ID = pv2.POST_ID GROUP BY p2.POST_ID) r ON p.POST_ID = r.id ORDER BY r."count";

count(v.voteId)DSL で注文するにはどうすればよいですか? .orderBy(x(count(v.voteId)))動作していません

4

0 に答える 0