嗨大家好我使用这个MYSQL查询来获得当前月份的顶级上传用户和他们的图像视图总数:
$users = DB::query("SELECT * ,
COUNT(p.id) as numPics,
SUM(p.views) as totalViews
FROM
images p
INNER JOIN
users u
ON
p.user_id = u.id
WHERE
p.created_at >= \"$current_month\"
GROUP BY p.user_id
ORDER BY totalViews DESC LIMIT 10");
totalViews返回所有图片的总视图的麻烦,我想要的是获得当前月份上传的图片的总观看次数。 谢谢。
答案 0 :(得分:1)
在mysql中使用 MONTH(NOW())获取当月的数据
p.created_at >= MONTH(NOW())
答案 1 :(得分:0)
将group by语句和select子句更改为此
SELECT * ,
(SELECT COUNT(*) FROM images where id = p.id) as numPics,
SUM(p.views) as totalViews
FROM
images p
INNER JOIN
users u
ON
p.user_id = u.id
WHERE
p.created_at >= \"$current_month\"
GROUP BY p.user_id, p.id
ORDER BY totalViews DESC LIMIT 10"
答案 2 :(得分:0)
您需要使用extract method
"SELECT * ,
(SELECT COUNT(*) FROM images where id = p.id) as numPics,
SUM(p.views) as totalViews
FROM
images p
INNER JOIN
users u
ON
p.user_id = u.id
WHERE
EXTRACT(YEAR_MONTH FROM p.created_at) >= EXTRACT(YEAR_MONTH FROM \"$current_month\")
GROUP BY p.user_id, p.id
ORDER BY totalViews DESC LIMIT 10"
变量的名称是miss-leading,即$ current_month,但你的评论说它有一个时间戳值,例如“2013-05-01 23:59:59”
答案 3 :(得分:0)
这个查询看起来像一个完美的例子,使它更通用一些。当您为created_at
添加上限时,您也可以使用相同的查询来查找上个月(或任何其他月份)的上限。
$lower_limit = date('Y-m-d', strtotime('first day of this month'));
$upper_limit = date('Y-m-d', strtotime('first day of next month'));
我假设你正在使用PDO prepared statements,所以我只提供SQL。
SELECT u.*,
COUNT(p.id) as numPics,
SUM(p.views) as totalViews
FROM
images p
INNER JOIN
users u
ON
p.user_id = u.id
WHERE
p.created_at >= :lower_limit
AND p.created_at < :upper_limit
GROUP BY p.user_id
ORDER BY totalViews DESC
LIMIT 10
请注意,这不会选择任何图像。结果集应该是一致的,当您按user_id分组时,您无法控制结果集中的图像数据。