我正面临一项我无法解决的任务。
首先,我有一个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。
似乎并不困难,但我无法编写任何有效的语法。
答案 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
循环,里面有数据库调用,正确的方法是获取时间戳之间的所有结果作为关联的数组,然后是横向数组