1

我目前正在根据时间戳获取用户访问次数,但我还想包括总访问次数。这可能与一个 MySQL 语句有关吗?这是我当前的查询,它仅根据时间戳返回一个计数:

$sql = "SELECT count(*) as visitors_count FROM profile_visits
        LEFT JOIN users on users.user_id=profile_visits.user_id
        LEFT JOIN profile_info ON profile_info.user_id = users.user_id
        WHERE profile_user_id=5
        AND users.restricted <> 1
        AND profile_visits.visit_time > '2012-07-30 18:53:16'";

我还可以返回不包括时间戳的访问总数吗?

4

1 回答 1

2

您可以使用CASE表达式在 内有条件地聚合COUNT()

SELECT    COUNT(*) AS total_count,
          COUNT(CASE WHEN profile_visits.visit_time > '2012-07-30 18:53:16' THEN 1 END) AS visitors_count
FROM      profile_visits
LEFT JOIN users ON users.user_id=profile_visits.user_id
LEFT JOIN profile_info ON profile_info.user_id = users.user_id
WHERE     profile_user_id=5 AND 
          users.restricted <> 1

我只是将> '2012-07-30 18:53:16'fromWHERE子句移到CASE表达式中COUNT(),如果它满足该条件,则只会在其中计算行。当然,COUNT(*)无论时间戳如何,都会计算所有行。

于 2012-08-01T12:23:37.807 回答