我正在创建一个包含论坛,主题,帖子和喜欢的论坛系统。这个问题是关于用以下语句创建的后两个表:
CREATE TABLE posts
(
postID INT(8) NOT NULL AUTO_INCREMENT PRIMARY KEY,
postDate DATETIME NOT NULL,
postContent TEXT NOT NULL,
postThread INT(8) NOT NULL,
FOREIGN KEY(postThread) REFERENCES threads(threadID) ON DELETE CASCADE ON
UPDATE CASCADE
);
CREATE TABLE likes
(
likeID INT(8) NOT NULL PRIMARY KEY AUTO_INCREMENT,
likeUserID INT(8) NOT NULL,
likePostID INT(8) NOT NULL,
FOREIGN KEY(likePostID) REFERENCES posts(postID),
FOREIGN KEY(likeUserID) REFERENCES users(userID)
);
在每个线程页面(thread.php?id=x
)上,我查询数据库以获取以下将在HTML中回显的数据:
SELECT posts.postID, posts.postContent, likes.likePostID
FROM posts
LEFT JOIN likes ON posts.postID = likes.likePostID
WHERE posts.postThread = ?
ORDER BY posts.postDate asc
在phpmyadmin中,运行以下语句会得到以下结果:
postID | likePostID | postContent
1 3 foo
1 3 foo
1 3 foo
2 NULL bar
3 NULL blah
我想知道如何获取LEFT JOIN
返回的行数,其中当前帖子的ID匹配likePostID
不为空的likePostID
,在上面的示例中ID为1的帖子为3。页面上“喜欢”按钮附近的每个帖子都会回显该值。可以使用一个查询来完成此操作,还是我需要分别查找每个帖子的点赞次数?
我目前正在使用while ($row = mysqli_fetch_assoc($result))
回显所有相关信息。
答案 0 :(得分:0)
SQL具有如下所述的计数功能:
https://www.w3schools.com/sql/sql_count_avg_sum.asp
select count(column_name) from table where condition
很显然,您必须将您的查询与联接一起批量处理,但这将使您有所作为。
否则,在php mysqli_num_rows()中有一个函数将返回行数。