回答編集履歴

1

見直し

2021/05/31 05:45

投稿

退会済みユーザー
test CHANGED
@@ -3,6 +3,48 @@
3
3
  とくにFORM要素があるようでもないし、ajaxにて送信しているわけでもない。
4
4
 
5
5
  そして、その「いいね」したときの記録はどのようにしているのでしょうか。
6
+
7
+
8
+
9
+ この下り:
10
+
11
+ ```php
12
+
13
+ // 全ての投稿を取得
14
+
15
+ $sql = "SELECT * FROM Post LEFT OUTER JOIN Members ON Post.member_id = Members.member_id ORDER BY post_date DESC";
16
+
17
+ $res = $db->query($sql);
18
+
19
+
20
+
21
+ if( $res ) {
22
+
23
+ $message_array = $res->fetchAll(PDO::FETCH_ASSOC);
24
+
25
+ }
26
+
27
+
28
+
29
+ // いいね数取得
30
+
31
+ $p_id = $value['post_id'];
32
+
33
+ $dbPostGoodNum = count(getGood($p_id));
34
+
35
+ ```
36
+
37
+ 投稿のすべてを取得するクエリーからじゃ、どう頑張ってもいいね数は取れないと思いますよ。
38
+
39
+ コピペで作るにしても雑すぎる。
40
+
41
+
42
+
43
+ コードを書いてないけど、`$value['post_id']`はもしかして`$_GET['post_id']`と勘違いしたとか?
44
+
45
+
46
+
47
+ ---
6
48
 
7
49
 
8
50
 
@@ -58,7 +100,7 @@
58
100
 
59
101
  ```sql
60
102
 
61
- SELECT p.post_id, p.member_id, m.name, p.message, p.post_date
103
+ SELECT p.post_id, p.member_id, m.name, p.message, p.post_date, l.cnt
62
104
 
63
105
  FROM post AS p
64
106
 
@@ -66,7 +108,7 @@
66
108
 
67
109
  LEFT OUTER JOIN (
68
110
 
69
- SELECT post_id, COUNT(like_id)
111
+ SELECT post_id, COUNT(like_id) AS cnt
70
112
 
71
113
  FROM likes
72
114
 
@@ -79,3 +121,19 @@
79
121
  ```
80
122
 
81
123
  みたいになるんですかね、あくまで机上のSQL。
124
+
125
+
126
+
127
+ function getGood() にて、
128
+
129
+ LIKESテーブルの全行を配列に読み込もうとしていますが、
130
+
131
+ PHPの配列上に何十行何百行何千行読み込むつもりでしょうか、
132
+
133
+ その上で配列を走査していいね数をカウントするくらいなら、
134
+
135
+ 通常その手の集計はSQLでデータベースに行わせてください。
136
+
137
+ 適切にインデックスも施されていれば、
138
+
139
+ サクッとカウントくらいできます。