Ich habe 2 Tabellen: photo
und like
. Ich versuche, beliebte Fotos basierend auf der Anzahl der Likes an einem Tag zu erhalten. Also im Grunde so etwas wie 'heute populär'.MySQL beliebte Zeilen auf verschiedenen Zeitniveaus
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
Dies funktioniert gut, wenn es heute genügend Likes gibt. Aber wenn es am vergangenen Tag keine Likes gibt, werden keine Einträge zurückgegeben.
Ich möchte auch ein wenig ändern. Ist es möglich, Levels zu machen? Zum Beispiel:
Rang Fotos basierend auf mehreren Tagen:
1. Get photos based on how many likes today
2. Get photos based on how many likes for last week
and so on...
Also im Grunde, was das bedeutet ist, lassen Sie uns sagen, dass wir 30 Produkte erhalten müssen. Zuerst wird es versuchen, Zeilen zu bekommen, basierend darauf, wie viele Likes es heute gab. Es kann eine beliebige Zahl von 20, 15 usw. sein. Dann wird es die verbleibenden Zeilen erhalten, die benötigt werden, um zu einer Gesamtzahl von 30 zu gelangen, aber wird nun basierend auf wie vielen Likes in einer Woche sortiert.
So something like:
SELECT FROM photo SORT BY likes today, likes in a week ...
Vielen Dank für Ihre Hilfe!
ändern wohin und – Strawberry
DDLs und/oder einen sqlfiddle sein könnte helfen – Strawberry