Php 按字段分组时如何统计数据库出现次数

Php 按字段分组时如何统计数据库出现次数,php,sql,group-by,count,Php,Sql,Group By,Count,我有一个表,有两行,比如说‘user’和‘action’。其内容如下— user | action bob page view mike detail view bob page view mike page view bob detail view 我想按用户对查询进行分组,并像这样计算所述用户的每个操作发生次数- bob = (2) page views (1) detail view mi

我有一个表,有两行,比如说‘user’和‘action’。其内容如下—

user    |    action

bob          page view
mike         detail view
bob          page view
mike         page view
bob          detail view
我想按用户对查询进行分组,并像这样计算所述用户的每个操作发生次数-

bob = (2) page views (1) detail view
mike = (1) page view (2) detail views
我尝试过分组方式,但它将每个查询限制为1,因为其分组方式如下-

$sql = "SELECT * FROM table GROUP BY user";
然后使用if语句-

if($action == 'page view'){
    $pv++;
}

我知道在语句中有一种正确的方法可以做到这一点,而不使用if语句,但不确定如何。。谢谢

您可以直接在SQL中执行:

SELECT user, action, count(*) as total
FROM table 
GROUP BY 1, 2

您可以直接在SQL中执行此操作:

SELECT user, action, count(*) as total
FROM table 
GROUP BY 1, 2

如果希望数据库引擎在一行中返回每个用户的总页面/详细信息视图,则必须使用条件分支语句。以下查询将返回所有用户及其页面视图和详细视图:

SELECT user,
SUM(CASE WHEN action = 'page view' THEN 1 ELSE 0 END) AS page_view,
SUM(CASE WHEN action = 'detail view' THEN 1 ELSE 0 END) AS detail_view
FROM table
GROUP BY user;

如果希望数据库引擎在一行中返回每个用户的总页面/详细信息视图,则必须使用条件分支语句。以下查询将返回所有用户及其页面视图和详细视图:

SELECT user,
SUM(CASE WHEN action = 'page view' THEN 1 ELSE 0 END) AS page_view,
SUM(CASE WHEN action = 'detail view' THEN 1 ELSE 0 END) AS detail_view
FROM table
GROUP BY user;

是的,也许sql可以直接做到这一点
按用户从表组中选择用户、计数(*),(不同操作)

是的,也许sql可以直接执行此操作
按用户从表组中选择用户、计数(*)和(不同操作)

谢谢!你能解释一下这是如何工作的吗?1和2在分组中代表什么?GROUP BY 1,2相当于GROUP BY user,action。所以使用这种方法,我从哪里可以得到每个用户的不同分组操作?我是否使用类似$user=$row['user']和$action=$row['total']的内容?上面的查询将首先按用户分组,然后按操作(页面视图、详细视图)分组,并输出每次出现的次数。Bob将有两行:(1)Bob-page视图-2和(2)Bob-detail视图-1这是MySql语法吗?谢谢!你能解释一下这是如何工作的吗?1和2在分组中代表什么?GROUP BY 1,2相当于GROUP BY user,action。所以使用这种方法,我从哪里可以得到每个用户的不同分组操作?我是否使用类似$user=$row['user']和$action=$row['total']的内容?上面的查询将首先按用户分组,然后按操作(页面视图、详细视图)分组,并输出每次出现的次数。Bob将有两行:(1)Bob-page视图-2和(2)Bob-detail视图-1这是MySql语法吗?这非常聪明,谢谢!这很聪明,谢谢!