回答編集履歴

2

修正

2019/07/02 04:36

投稿

m.ts10806
m.ts10806

スコア80850

test CHANGED
@@ -51,3 +51,51 @@
51
51
  最低でも2番目で組んでおくべきです。
52
52
 
53
53
  「どうしてもそのDBにしかない機能を使わなきゃいけない場面」ってそうそうなくて、汎用的に組むことは可能です。
54
+
55
+
56
+
57
+ 追記されたので追記:
58
+
59
+ ----
60
+
61
+
62
+
63
+ > reserveレコードに入っている予約ID(reserve_shop_id)とログイン時にsessionに入ったログインID(shop_id)で一致した情報を取り出して、ページング機能を使いreserveテーブルにデータが入ったのが遅い順(reserve_time)で表示させたいです。
64
+
65
+ MYSQLではSQL_CALC_FOUND_ROWSを使っていましたがPostgresqlでは使えないようなので同じように動かしたいです。
66
+
67
+
68
+
69
+ count()のSQLとorder by ,offset limit を指定したSQL
70
+
71
+ 2回実行すれば良いです。これならDB変わっても影響は少ないでしょう。
72
+
73
+
74
+
75
+ が、
76
+
77
+
78
+
79
+ うっすら記憶があったので探したところ、[ずいぶん前のご自身の質問](https://teratail.com/questions/180177)で[OVER()](https://www.postgresql.jp/document/9.4/html/tutorial-window.html)とか使われてましたけど、あれは結局何だったのでしょうか。おそらく[このような記事](http://honey8823.hateblo.jp/entry/2018/06/21/141806)を参考にして作ったのでしょうけど、ちゃんと組めば動きますよ(私も手元で確認しました)
80
+
81
+
82
+
83
+ ```SQL
84
+
85
+ SELECT
86
+
87
+ *
88
+
89
+ ,COUNT(*) OVER() AS found_rows
90
+
91
+ FROM
92
+
93
+ TEST
94
+
95
+ WHERE
96
+
97
+ delete_flg = '0'
98
+
99
+ LIMIT 5 OFFSET 0
100
+
101
+ ```

1

修正

2019/07/02 04:36

投稿

m.ts10806
m.ts10806

スコア80850

test CHANGED
@@ -25,3 +25,29 @@
25
25
 
26
26
 
27
27
  ※どういう結果を出したくてどう調べたのかが提示されていないので出来る回答はここまでです。
28
+
29
+
30
+
31
+ 追記。
32
+
33
+ DBの種類が変わるときのコツ。
34
+
35
+ 以下のどれか(上から順に推奨度が低いもの)
36
+
37
+
38
+
39
+ 0. 方言や文法が全く変わることもあるので、今あるものをどうにかするのではなく、今あるものは一旦捨ててどう出したいデータかを考えて最初から組み直す
40
+
41
+ 0. 初めからそのDBにしか存在しないような機能は使わない
42
+
43
+ 0. フレームワークを導入する
44
+
45
+
46
+
47
+ まあ、フレームワーク導入が一番ですね。
48
+
49
+ それに今回くらいの内容だとMySQLにしかない機能を使わなくても実現可能なので(offset,limitの書き方くらい)
50
+
51
+ 最低でも2番目で組んでおくべきです。
52
+
53
+ 「どうしてもそのDBにしかない機能を使わなきゃいけない場面」ってそうそうなくて、汎用的に組むことは可能です。