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 に答える