按ID和时间戳计算多个表中的行数

时间:2013-05-05 16:40:05

标签: php mysql sql

我正面临一项我无法解决的任务。

首先,我有一个mysql数据库,其中我为每种类型的用户生成的内容(如博客,照片和视频)提供了特定的表格。这些表格类似,通常如下:

USER_ID | TIMESTAMP | CONTENT_ID | CONTENT
1       | 1364978606|      1     | video_url_1
1       | 1364978606|      2     | video_url_2

每行包含一个发布的内容。

问题是:我需要在每个表中计算每个USER_ID的“行”数,按时间戳周期(两个时间戳之间)进行过滤。我需要按USER_ID添加行数(视频中的总计数加上照片中的总计数加上博客中的总计数),并且仅显示五个最高结果,不包括一个或两个作为管理员用户的USER_ID。

似乎并不困难,但我无法编写任何有效的语法。

2 个答案:

答案 0 :(得分:1)

select  user_id
,       count(*)
from    (
        select  user_id
        ,       timestamp
        from    video
        union all
        select  user_id
        ,       timestamp
        from    photo
        union all
        select  user_id
        ,       timestamp
        from    blog
        ) SubQueryAlias
where   user_id not in (6,7)  -- assuming admin users 6 and 7
        and timestamp between '2013-01-01' and '2013-04-01'
group by
        user_id
order by
        count(*) desc
limit   5

答案 1 :(得分:0)

首先,获取所需的所有行:

SELECT * FROM videos WHERE user_id = ? AND timestamp < ? AND timestamp > ?;

然后,在PHP中,假设您使用mysqli,您只需在结果对象上调用num_rows

$numVideos = $results->num_rows;

如果你想为多个用户做这个,懒惰的方式是一个foreach循环,里面有数据库调用,正确的方法是获取时间戳之间的所有结果作为关联的数组,然后是横向数组