5

と の 2 つのテーブルがphotoありlikeます。1日のいいね数に基づいて人気のある写真を取得しようとしています. つまり、基本的に「今日の人気」のようなものです。

SELECT
  p.id AS id, COUNT(li.id) AS total_likes \
FROM `photo` p \
  LEFT JOIN `like` li \
    ON p.id = li.photo_id \
WHERE
  li.date > DATE_SUB(CURDATE(), INTERVAL 1 DAY) \
GROUP BY \
  p.id

これは、今日の「いいね!」の数が十分にある場合にうまく機能します。ただし、過去 1 日にいいねがなかった場合、レコードは返されません。

これも少し変えたいと思います。レベルを作ることは可能ですか?例:
複数の日に基づいて写真をランク付けします。

1. Get photos based on how many likes today
2. Get photos based on how many likes for last week
and so on...

つまり、基本的にこれが行うことは、30 個のアイテムを取得する必要があるとしましょう。最初に、今日の「いいね!」の数に基づいて行を取得しようとします。20、15 などの任意の数を指定できます。次に、合計 30 になるのに必要な残りの行を取得しますが、1 週間のいいね数に基づいて並べ替えます。

So something like:
SELECT FROM photo SORT BY likes today, likes in a week ...

ご協力いただきありがとうございます!

4

3 に答える 3

1

ユニオンを試しましたか?

technet.microsoft

Techonthenet.com

ウィキペディア

そして存在しない

MySQL

UNION を使用すると、列が同じである限り、複数の select ステートメントを選択して結合できます。

頭のてっぺんから、のようなもの

(select p.id as id,
       count(li.id) as total_likes
  from photo p,
       like li
 where p.id = li.photo_id
   and li.date > date_sub(curdate(), interval 1 day)
   and rownum <= 10
 order by total_likes
 group by p.id)
 union
(select p.id as id,
       count(li.id) as total_likes
  from photo p,
       like li
 where p.id = li.photo_id
   and li.date > date_sub(curdate(), interval 7 day)
   and rownum <= 10
   and not exists (select p.id as id,
                    count(li.id) as total_likes
                     from photo p,
                          like li
                    where p.id = li.photo_id
                      and li.date > date_sub(curdate(), interval 1 day)
                      and rownum <= 10
                    order by total_likes
                    group by p.id)
 order by total_likes
 group by p.id)

これをテストしていませんが、このようなものがうまくいくと思います

于 2013-08-21T09:12:56.560 に答える
0

今日から「いいね」日までの経過週数を計算し、それらでグループ化できます。

SELECT
  p.id AS id, COUNT(li.id) AS total_likes, period \
FROM `photo` p \
  LEFT JOIN `like` li \
  ON p.id = li.photo_id \
WHERE
  DATEDIFF(li.date, now())+7)%7 AS period \
GROUP BY \
  p.id, period
ORDER by period, total_likes DESC 
LIMI 30
于 2013-08-21T13:25:29.097 に答える