如何获取使用JOIN返回的相关表的行数?

时间:2018-07-10 22:15:59

标签: mysql join

我正在创建一个包含论坛,主题,帖子和喜欢的论坛系统。这个问题是关于用以下语句创建的后两个表:

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))回显所有相关信息。

1 个答案:

答案 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()中有一个函数将返回行数。