質問編集履歴
3
変更
test
CHANGED
@@ -1 +1 @@
|
|
1
|
-
|
1
|
+
mysqlからpostgresqlに変更したい
|
test
CHANGED
@@ -1,6 +1,10 @@
|
|
1
1
|
### 前提・実現したいこと
|
2
2
|
|
3
|
-
mysqlからpostgresqlに変更した際に
|
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
|
-
|
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
|
-
|
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
|
-
|
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
情報の追加
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の追加
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
|
41
|
+
SELECT COUNT(*) FROM reserve WHERE reserve_shop_id=:shop_id ORDER BY reserve_time DESC;
|
42
|
+
|
43
|
+
```
|
32
44
|
|
33
45
|
|
34
46
|
|