您可以根据 CASE 计算不同的计数,例如过去 30 天的点赞数以及最后一天的计数。上周和过去 30 天:
SELECT
p.id AS id
,COUNT(CASE WHEN li.DATE > DATE_SUB(CURDATE(), INTERVAL 1 DAY) THEN li.id END) AS daily_likes
,COUNT(CASE WHEN li.DATE > DATE_SUB(CURDATE(), INTERVAL 7 DAY) THEN li.id END) AS weekly_likes
,COUNT(li.id) AS total_likes
FROM `photo` p
JOIN `LIKE` li
ON p.id = li.photo_id
WHERE
li.DATE > DATE_SUB(CURDATE(), INTERVAL 30 DAY)
GROUP BY
p.id
ORDER BY daily_likes DESC, weekly_likes DESC, total_likes DESC
LIMIT 30
我不知道你的限制是基于哪个定义,它可能是这样的
SELECT *
FROM
(
SELECT
p.id AS id
,COUNT(CASE WHEN li.DATE > DATE_SUB(CURDATE(), INTERVAL 1 DAY) THEN li.id END) AS daily_likes
,COUNT(CASE WHEN li.DATE > DATE_SUB(CURDATE(), INTERVAL 7 DAY) THEN li.id END) AS weekly_likes
,COUNT(li.id) AS total_likes
FROM `photo` p
JOIN `LIKE` li
ON p.id = li.photo_id
WHERE
li.DATE > DATE_SUB(CURDATE(), INTERVAL 30 DAY)
GROUP BY
p.id
) AS dt
ORDER BY
case when daily_likes > 20 then daily_likes else 0 end desc,
case when weekly_likes > 100 then weekly_likes else 0 end desc,
total_likes DESC
LIMIT 30