質問編集履歴

3

変更

2019/07/09 15:16

投稿

ariiiiiga
ariiiiiga

スコア66

test CHANGED
@@ -1 +1 @@
1
- Postgresqlのエラー
1
+ mysqlからpostgresqlに変更した
test CHANGED
@@ -1,6 +1,10 @@
1
1
  ### 前提・実現したいこと
2
2
 
3
- mysqlからpostgresqlに変更した際に下記のSQLエラーました。
3
+ mysqlからpostgresqlに変更した際に出力変わってしいました。
4
+
5
+ ・予約件数の表示がshop_idと結びついていなく、reserveレコードに入っている全件をカウントしてしまう。
6
+
7
+ ・予約情報が表示されない($arr_reserveが空になっている)
4
8
 
5
9
 
6
10
 
@@ -16,38 +20,220 @@
16
20
 
17
21
 
18
22
 
19
- ### 発生している問題・エラメッセ
23
+ ### 該当のソスコ
24
+
20
-
25
+ ```ここに言語を入力
26
+
21
-
27
+ 変更前のMYSQL
28
+
29
+ //予約情報の取り出し
30
+
31
+ SELECT SQL_CALC_FOUND_ROWS * FROM reserve WHERE reserve_shop_id=:shop_id ORDER BY reserve_time DESC limit :limit offset :offset;
32
+
33
+
34
+
35
+ // 予約Total件数
36
+
37
+ SELECT FOUND_ROWS() as total;
22
38
 
23
39
  ```
24
40
 
25
- "SQLSTATE[42803]: Grouping error: 7 ERROR: column "reserve.reserve_time" must appear in the GROUP BY clause or be used in an aggregate function LINE 1: ...) from reserve where reserve_shop_id=$1 order by reserve_ti... ^"
41
+
42
+
43
+ ```ここに言語を入力
44
+
45
+ 変更後のPostgresql
46
+
47
+ //予約情報の取り出し
48
+
49
+ SELECT * FROM reserve WHERE reserve_shop_id=:shop_id ORDER BY reserve_time DESC limit :limit offset :offset;
50
+
51
+
52
+
53
+ // 予約Total件数
54
+
55
+ SELECT COUNT(*) as total;
26
56
 
27
57
  ```
28
58
 
29
-
30
-
31
- ### 該当のソースコード
32
-
33
59
  ```ここに言語を入力
34
60
 
61
+ 全体
62
+
35
- 変更前のMYSQL
63
+ <?php
64
+
36
-
65
+ error_reporting(E_ALL);
66
+
67
+ ini_set("display_errors",1);
68
+
69
+ session_start();
70
+
71
+ try {
72
+
73
+ //接続済み
74
+
75
+ $pdo = new PDO(DSN,DB_USER,DB_PASS);
76
+
77
+ $pdo->setAttribute(PDO::ATTR_EMULATE_PREPARES,false);
78
+
79
+ $pdo->setAttribute(PDO::ATTR_ERRMODE,PDO::ERRMODE_EXCEPTION);
80
+
81
+
82
+
83
+
84
+
85
+ // ①ユーザーIDからユーザー名を取り出す
86
+
87
+ $query = "SELECT * FROM shop WHERE shop_id=:shop_id";
88
+
89
+ $shop_stmt = $pdo->prepare($query);
90
+
91
+ $shop_stmt->bindValue(':shop_id', $_SESSION['user'], PDO::PARAM_INT);
92
+
93
+ $shop_stmt->execute();
94
+
95
+
96
+
97
+ // ショップ情報の取り出し
98
+
99
+ $row = $shop_stmt->fetch(PDO::FETCH_ASSOC);
100
+
101
+ $shop_id = $row['shop_id'];
102
+
103
+ $shop_name = $row['shop_name'];
104
+
105
+ $yesno = $row['yesno'];
106
+
107
+ $shop_comment = $row['shop_comment'];
108
+
109
+ $shop_email = $row['shop_email'];
110
+
111
+   
112
+
113
+   // 予約情報の取り出し
114
+
37
- SELECT SQL_CALC_FOUND_ROWS * FROM reserve WHERE reserve_shop_id=:shop_id ORDER BY reserve_time DESC limit :limit offset :offset;
115
+ $sql = $pdo->prepare('select * from reserve where reserve_shop_id=:shop_id order by reserve_time desc limit :limit offset :offset');
116
+
117
+ $sql->bindValue(':shop_id', $_SESSION["user"], PDO::PARAM_INT);
118
+
119
+ $sql->bindValue(":offset", $offset, PDO::PARAM_INT);
120
+
121
+ $sql->bindValue(":limit", PAGE_LIMIT, PDO::PARAM_INT);
122
+
123
+ $sql->execute();
124
+
125
+
126
+
127
+ $arr_reserve = [];
128
+
129
+ while ($result = $sql->fetchAll(PDO::FETCH_ASSOC)){
130
+
131
+ $arr_reserve[] = [
132
+
133
+ 'reserve_shop_id' => $result['reserve_shop_id'],
134
+
135
+ 'reserve_comment' => $result['reserve_comment'],
136
+
137
+ 'reserve_time' => $result['reserve_time'],
138
+
139
+ ];
140
+
141
+ }
142
+
143
+
144
+
145
+ // 予約Total件数
146
+
147
+ $totalRow = $pdo->prepare("SELECT COUNT(*) as total from reserve");
148
+
149
+ $all = $totalRow->fetch(PDO::FETCH_ASSOC);
150
+
151
+
152
+
153
+ } catch (PDOException $e) {
154
+
155
+ var_dump($e);
156
+
157
+ die();
158
+
159
+ }
160
+
161
+ ?>
162
+
163
+ <!DOCTYPE HTML>
164
+
165
+ <html lang="ja">
166
+
167
+ <head>
168
+
169
+ <meta charset="utf-8">
170
+
171
+ <title>トップ</title>
172
+
173
+ </head>
174
+
175
+
176
+
177
+ <body>
178
+
179
+ <main>
180
+
181
+
182
+
183
+ <p class="alert alert-success" style="text-align:center;">予約数<?=htmlspecialchars($all['total']),ENT_QUOTES,'utf-8'); ?>件</p>
184
+
185
+ <table class="table table-striped">
186
+
187
+ <thead>
188
+
189
+ <tr>
190
+
191
+ <th>コメント</th>
192
+
193
+ <th>予約時間</th>
194
+
195
+ </tr>
196
+
197
+ </thead>
198
+
199
+ <tbody>
200
+
201
+ <?php foreach($arr_reserve as $key => $value): ?>
202
+
203
+ <tr>
204
+
205
+ <td><?= htmlspecialchars($value['reserve_comment'], ENT_QUOTES, 'UTF-8'); ?></td>
206
+
207
+ <td><?= htmlspecialchars($value['reserve_time'], ENT_QUOTES, 'UTF-8'); ?></td>
208
+
209
+ <tr>
210
+
211
+ <?php endforeach; ?>
212
+
213
+ </tbody>
214
+
215
+ </table>
216
+
217
+
218
+
219
+
220
+
221
+
222
+
223
+ </main>
224
+
225
+ </div>
226
+
227
+ </body>
228
+
229
+ </html>
230
+
231
+
38
232
 
39
233
  ```
40
234
 
41
235
 
42
236
 
43
- ```ここに言語を入力
44
-
45
- 変更後のPostgresql
46
-
47
- SELECT COUNT(*) FROM reserve WHERE reserve_shop_id=:shop_id ORDER BY reserve_time DESC limit :limit offset :offset;
48
-
49
- ```
50
-
51
237
 
52
238
 
53
239
  ### 試したこと

2

情報の追加

2019/07/09 15:16

投稿

ariiiiiga
ariiiiiga

スコア66

test CHANGED
File without changes
test CHANGED
@@ -1,6 +1,12 @@
1
1
  ### 前提・実現したいこと
2
2
 
3
3
  mysqlからpostgresqlに変更した際に下記のSQLエラーが出ました。
4
+
5
+
6
+
7
+ reserveレコードに入っている予約ID(reserve_shop_id)とログイン時にsessionに入ったログインID(shop_id)で一致した情報を取り出して、ページング機能を使いreserveテーブルにデータが入ったのが遅い順(reserve_time)で表示させたいです。
8
+
9
+ MYSQLではSQL_CALC_FOUND_ROWSを使っていましたがPostgresqlでは使えないようなので同じように動かしたいです。
4
10
 
5
11
  調べましたが解決策がわかりませんでした。
6
12
 
@@ -28,7 +34,7 @@
28
34
 
29
35
  変更前のMYSQL
30
36
 
31
- SELECT SQL_CALC_FOUND_ROWS * FROM reserve WHERE reserve_shop_id=:shop_id ORDER BY reserve_time DESC;
37
+ SELECT SQL_CALC_FOUND_ROWS * FROM reserve WHERE reserve_shop_id=:shop_id ORDER BY reserve_time DESC limit :limit offset :offset;
32
38
 
33
39
  ```
34
40
 
@@ -38,7 +44,7 @@
38
44
 
39
45
  変更後のPostgresql
40
46
 
41
- SELECT COUNT(*) FROM reserve WHERE reserve_shop_id=:shop_id ORDER BY reserve_time DESC;
47
+ SELECT COUNT(*) FROM reserve WHERE reserve_shop_id=:shop_id ORDER BY reserve_time DESC limit :limit offset :offset;
42
48
 
43
49
  ```
44
50
 

1

変更前のMYSQLの追加

2019/07/02 04:24

投稿

ariiiiiga
ariiiiiga

スコア66

test CHANGED
File without changes
test CHANGED
@@ -24,11 +24,23 @@
24
24
 
25
25
  ### 該当のソースコード
26
26
 
27
+ ```ここに言語を入力
28
+
29
+ 変更前のMYSQL
30
+
31
+ SELECT SQL_CALC_FOUND_ROWS * FROM reserve WHERE reserve_shop_id=:shop_id ORDER BY reserve_time DESC;
32
+
33
+ ```
27
34
 
28
35
 
29
- ```ここに言語名を入力
30
36
 
37
+ ```ここに言語を入力
38
+
39
+ 変更後のPostgresql
40
+
31
- SELECT COUNT(*) FROM reserve WHERE reserve_shop_id=:shop_id ORDER BY reserve_time DSC LIMIT :LIMIT OFFSET :OFFSET
41
+ SELECT COUNT(*) FROM reserve WHERE reserve_shop_id=:shop_id ORDER BY reserve_time DESC;
42
+
43
+ ```
32
44
 
33
45
 
34
46