我目前正在根据时间戳获取用户访问次数,但我还想包括总访问次数。这可能与一个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'";
我还可以返回排除时间戳的访问总数吗?
答案 0 :(得分: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'
从WHERE
子句移动到CASE
中的COUNT()
表达式,只有符合该条件的行才会计算该行。当然,COUNT(*)
将计算所有行,而不考虑时间戳。