質問するログイン新規登録

回答編集履歴

4

修正

2018/04/03 07:16

投稿

sazi
sazi

スコア25430

answer CHANGED
@@ -2,6 +2,8 @@
2
2
  ```SQL
3
3
  select *,(select count(*) from table t where age>20) from table where age>20
4
4
  ```
5
+ ※他にもfrom 句でインラインビューの直積などでもできますけど、不細工さは同じ
6
+
5
7
  全ての行に件数が埋め込まれますので、先頭を取得した際にでも取得すればいいのですけど。
6
8
  上記で行うのなら、fetchall()の結果をlen()で求める方がすっきりします。
7
9
 

3

修正

2018/04/03 07:15

投稿

sazi
sazi

スコア25430

answer CHANGED
@@ -3,9 +3,9 @@
3
3
  select *,(select count(*) from table t where age>20) from table where age>20
4
4
  ```
5
5
  全ての行に件数が埋め込まれますので、先頭を取得した際にでも取得すればいいのですけど。
6
- 上記で行うのなら、fetchall()の結果をlen()で求める方がすっきりします
6
+ 上記で行うのなら、fetchall()の結果をlen()で求める方がすっきりします。
7
7
 
8
- 表示する際にページ制御を行う場合は、count()を別に取得する事が多いです
8
+ 表示する際にページ制御を行う場合は、count()を別に取得する事が多いです。
9
9
  selectで全件取得はせずに、ページに表示する件数をoffset とlimitで制御して行うことになりますが、
10
10
  この際のoffsetは全体の件数(=count())とページ表示件数(=limitの値)から求めます。
11
11
  ※[取得するデータの数と開始位置を指定](https://www.dbonline.jp/sqlite/select/index10.html)

2

修正

2018/04/03 07:08

投稿

sazi
sazi

スコア25430

answer CHANGED
@@ -3,7 +3,7 @@
3
3
  select *,(select count(*) from table t where age>20) from table where age>20
4
4
  ```
5
5
  全ての行に件数が埋め込まれますので、先頭を取得した際にでも取得すればいいのですけど。
6
- 上記で行うのなら、fetchall()の結果をlen()で求める方がすっきりしますね。
6
+ 上記で行うのなら、fetchall()の結果をlen()で求める方がすっきりしますね。
7
7
 
8
8
  表示する際にページ制御を行う場合は、count()を別に取得する事が多いですね。
9
9
  selectで全件取得はせずに、ページに表示する件数をoffset とlimitで制御して行うことになりますが、

1

追記

2018/04/03 06:43

投稿

sazi
sazi

スコア25430

answer CHANGED
@@ -8,7 +8,11 @@
8
8
  表示する際にページ制御を行う場合は、count()を別に取得する事が多いですね。
9
9
  selectで全件取得はせずに、ページに表示する件数をoffset とlimitで制御して行うことになりますが、
10
10
  この際のoffsetは全体の件数(=count())とページ表示件数(=limitの値)から求めます。
11
+ ※[取得するデータの数と開始位置を指定](https://www.dbonline.jp/sqlite/select/index10.html)
11
12
 
12
13
  項目の取得と件数の取得を一度に行ってしまうと、必ず全体の取得になるので、遅くなることがあります。
13
14
  ※元々ページ制御を行うのは取得件数を限定して高速にしようというのが殆ど。
14
- これはfetchall()でも同じなので、状況に応じて使い分けて下さい。
15
+ これはfetchall()でも同じなので、状況に応じて使い分けて下さい。
16
+
17
+ こんなのもありました。※まあ、そのような設計になっていればですけど。
18
+ [OFFSETを使わない高速なページネーションの実現](https://qiita.com/mpyw/items/07c03600c2e38e91415e)