1

大家好,我正在使用这个 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 返回所有图片的总浏览量的麻烦,我想要的是获取当月上传的图片的总浏览量。谢谢 。

4

4 回答 4

1

在 mysql 中使用MONTH(NOW())获取当前月份的数据

p.created_at >= MONTH(NOW())
于 2013-05-06T13:34:23.257 回答
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准备好的语句,所以我将只提供 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 分组时,你无法控制结果集中的图像数据。

于 2013-05-07T05:27:22.257 回答
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"
于 2013-05-07T04:46:41.637 回答
0

您需要使用提取方法

"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"

变量的名称是错误的,即 $current_month ,但您的评论说它有一个时间戳值,例如“2013-05-01 23:59:59”

于 2013-05-07T05:17:45.013 回答