2017-07-13 5 views
0

Hier ist meine Tabellenstruktur:Wie kann ich Benutzer anhand ihres Rufs in einem bestimmten Zeitraum auswählen?

-- users 
+----+--------+--------------------+ 
| id | name | other columns ... 
+----+--------+--------------------+ 

-- votes 
+----+---------+---------+-------+------------+ 
| id | user_id | post_id | value | date_time | 
+----+---------+---------+-------+------------+ 
| 1 | 234234 | 3443 | 1  | 1442684886 | -- For example 
+----+---------+---------+-------+------------+ 

I Top-20-Benutzer in der letzten Woche auswählen möchten. Wie kann ich das machen?


Hier ist meine aktuelle Abfrage:

SELECT SUM(v.value) score , u.* 
FROM users u 
INNER JOIN votes 
ON u.id = v.user_id 
WHERE v.date_time > UNIX_TIMESTAMP(now() - INTERVAL 1 week) 
ORDER BY score DESC 
LIMIT 20; 

Aber meine Abfrage gibt nur eine Zeile.

+0

Siehe https://meta.stackoverflow.com/questions/333952/why-should-i-provide-an-mcve-for-what-seems-to-me-to-be-a-very -simple-sql-query – Strawberry

Antwort

0
Select sum(value) 
FROM users JOIN votes 
ON u.id = v.user_id 
WHERE v.date_time > UNIX_TIMESTAMP(now() - INTERVAL 1 week) 
GROUP BY name 
ORDER BY sum(value) DESC 
LIMIT 20; 
+0

Warum haben Sie keine 'Benutzer'-Spalten ausgewählt? –

+0

Es ist nur Arbeitsbeispiel können Sie nach der Summe (Wert), Spalte1, Spalte2 hinzufügen. Oder vor Summe (Wert) einfach SELECT *, Summe (Wert) FROM ... – Bluesky

Verwandte Themen