Wie kann man nach "nach Datum" sortieren, nach "Jahr"?

8

Was ich versuche zu implementieren, ist ähnlich wie bei SO. Ich möchte Posts nach Upvotes im letzten Tag, letzten Monat etc. ordnen. Mein Schema besteht aus zwei Tabellen,

%Vor%

Ich hoffe, das Schema ist ziemlich selbsterklärend. Das Problem ist, wenn ich "nach Tag" sortiere, indem ich einen inneren Join für Beiträge und Abstimmungen mache und eine Where-Klausel (' votes.date >= DATE_SUB(CURDATE(), INTERVAL 1 DAY ') habe, funktioniert das wie beabsichtigt, aber es werden die anderen Beiträge nicht angezeigt. Ich meine, die Beiträge, die am letzten Tag nicht abgestimmt hatten, werden komplett ignoriert. Ich möchte, dass diese Beiträge eine niedrige Priorität erhalten, aber in der Abfrage angezeigt werden.

Ich denke zwar an die Verwendung von Union-Operationen, aber ich suchte nach einem anderen Ansatz.

Update : Nehmen wir an, es gibt zwei Posts, 1,2.

und Stimmen-Tabelle ist wie,

%Vor%

Wenn ich nach meinem Ansatz abfrage, dann wird nur der Post - "1" angezeigt, da ich eine Datumsbeschränkung gesetzt habe, aber ich möchte, dass beide angezeigt werden. Hier ist meine Frage:

%Vor%     
Shubham 19.12.2012, 09:01
quelle

2 Antworten

2

Wenn Sie alle Beiträge anzeigen möchten, aber nur die letzten Abstimmungen zählen, sollte dies Folgendes tun:

%Vor%     
Barmar 19.12.2012, 09:29
quelle
2

Wenn ich es richtig verstanden habe:

SELECT *, IF(vote.date>=DATE_SUB(CURDATE(), INTERVAL 1 DAY), 1, 0) as rate FROM post INNER JOIN vote ON (post.id=vote.post_id) ORDER BY rate DESC;

%Vor%     
НЛО 19.12.2012 09:29
quelle

Tags und Links