在MySQL中计数并循环它

时间:2016-02-13 02:31:27

标签: mysql

假设我正在尝试显示视图数量(用户将点击“已查看”按钮,该按钮会将PostID和userID发送到tb_views数据库

(SELECT COUNT(Viewed) FROM tb_views WHERE Viewed = 6) AS ViewCount,

它工作正常,因为计数将被计入postID“6” 我将通过while循环运行该语句,这意味着如果有10个帖子,将显示10个帖子

现在的问题是如何将“Viewed =”分配给动态表单,它会自动更改每个生成的帖子?目前,如果我将其设置为“6”,则回显$ ViewCount的所有10个帖子将显示帖子6的观看次数而不是他们的帖子

我可以使用循环

正确生成PostID和所有内容的帖子

提前致谢!

2 个答案:

答案 0 :(得分:0)

SELECT Viewed, COUNT(Viewed) FROM tb_views GROUP BY Viewed

试试这段代码。您还可以将group by语句与where条件组合在一起,但如果您想获取每个postid的视图计数,那么如果您要使用where条件并且只使用1个postid,那么这是您的查询,那么您不需要使用它小组了。

答案 1 :(得分:0)

您需要执行多个JOIN查询。这是一个例子,应该接近你正在寻找的东西:

$sql = "SELECT tb_users.sName, tb_users.sCountry, COUNT(tb_views.Viewed) AS ViewCount, tb_posts.id AS postID
               tb_posts.sPost, tb_posts.sPlace, tb_posts.Time, tb_posts.iUserID
        FROM tb_posts 
        LEFT JOIN tb_views ON tb_views.postID = tb_posts.id 
        LEFT JOIN tb_users ON tb_posts.userID = tb_users.id
        ORDER BY id desc";
$mysqli ->  prepare ($sql);

确保仔细检查所有表和值是否正确,因为我无法看到您的数据库实际上是什么样的,我不得不猜测;)

这是一个使用别名的版本,这使它更清洁:

$sql = "SELECT u.sName, u.sCountry, COUNT(v.Viewed) AS ViewCount, p.id AS postID
               p.sPost, p.sPlace, p.Time, p.iUserID
        FROM tb_posts AS p
        LEFT JOIN tb_views AS v ON v.postID = p.id 
        LEFT JOIN tb_users AS u ON p.userID = u.id
        ORDER BY id desc";
$mysqli ->  prepare ($sql);