回答編集履歴
1
見直し
answer
CHANGED
@@ -2,6 +2,27 @@
|
|
2
2
|
とくにFORM要素があるようでもないし、ajaxにて送信しているわけでもない。
|
3
3
|
そして、その「いいね」したときの記録はどのようにしているのでしょうか。
|
4
4
|
|
5
|
+
この下り:
|
6
|
+
```php
|
7
|
+
// 全ての投稿を取得
|
8
|
+
$sql = "SELECT * FROM Post LEFT OUTER JOIN Members ON Post.member_id = Members.member_id ORDER BY post_date DESC";
|
9
|
+
$res = $db->query($sql);
|
10
|
+
|
11
|
+
if( $res ) {
|
12
|
+
$message_array = $res->fetchAll(PDO::FETCH_ASSOC);
|
13
|
+
}
|
14
|
+
|
15
|
+
// いいね数取得
|
16
|
+
$p_id = $value['post_id'];
|
17
|
+
$dbPostGoodNum = count(getGood($p_id));
|
18
|
+
```
|
19
|
+
投稿のすべてを取得するクエリーからじゃ、どう頑張ってもいいね数は取れないと思いますよ。
|
20
|
+
コピペで作るにしても雑すぎる。
|
21
|
+
|
22
|
+
コードを書いてないけど、`$value['post_id']`はもしかして`$_GET['post_id']`と勘違いしたとか?
|
23
|
+
|
24
|
+
---
|
25
|
+
|
5
26
|
憶測の上に推察しますが、
|
6
27
|
LIKESテーブルに「いいね」を記録するものだとした場合、
|
7
28
|
記録に係る処理がどこにもなさそうなので、
|
@@ -28,14 +49,22 @@
|
|
28
49
|
|
29
50
|
投稿と一緒にいいね数を取得するのに、
|
30
51
|
```sql
|
31
|
-
SELECT p.post_id, p.member_id, m.name, p.message, p.post_date
|
52
|
+
SELECT p.post_id, p.member_id, m.name, p.message, p.post_date, l.cnt
|
32
53
|
FROM post AS p
|
33
54
|
LEFT OUTER JOIN members AS m ON p.member_id = m.member_id
|
34
55
|
LEFT OUTER JOIN (
|
35
|
-
SELECT post_id, COUNT(like_id)
|
56
|
+
SELECT post_id, COUNT(like_id) AS cnt
|
36
57
|
FROM likes
|
37
58
|
GROUP BY post_id
|
38
59
|
) AS l on p.post_id = l.post_id
|
39
60
|
ORDER BY p.post_date;
|
40
61
|
```
|
41
|
-
みたいになるんですかね、あくまで机上のSQL。
|
62
|
+
みたいになるんですかね、あくまで机上のSQL。
|
63
|
+
|
64
|
+
function getGood() にて、
|
65
|
+
LIKESテーブルの全行を配列に読み込もうとしていますが、
|
66
|
+
PHPの配列上に何十行何百行何千行読み込むつもりでしょうか、
|
67
|
+
その上で配列を走査していいね数をカウントするくらいなら、
|
68
|
+
通常その手の集計はSQLでデータベースに行わせてください。
|
69
|
+
適切にインデックスも施されていれば、
|
70
|
+
サクッとカウントくらいできます。
|