2016-04-27 14 views
2

mein erster Beitrag ...mysql finden die jüngste jeden id

Ich habe eine Story Tisch, an die Benutzer-Flag Geschichten, in Priorität 1,2,3,4 für auf der Homepage der Website angezeigt wird.

Das Problem ist, dass, wenn sie Geschichten hinzufügen die alten auf Seite zwei, drei usw. im CMS gedrückt werden. Sie kennzeichnen dann eine neue "1", "2" usw., ohne die alten 1s, 2s usw. zu löschen - die in den Daten bleiben, nur für den Fall, dass die neue Nummer 1 "degradiert" wird (das Flag entfernt) oder gelöscht wird.

Was ich herausbekommen möchte, ist die newsid und Überschrift, von den letzten jeder Nummer "1", "2", "3" und "4".

Ich habe einige ähnliche Beiträge gefunden, aber es ist nicht der Zeitstempel, der wichtig ist, ist das Flag-Feld ("xorder" genannt). Die entsprechenden Felder in der „newsStories“ Tabelle sind unten:

newsid  int 
headline varchar(60) 
xorder  int (number or null) 
xtimestamp datetime - this is the publish date 

In diesem Szenario des xtimestamp Feld ist wichtig, da sein Datum/Uhrzeit sie die Nachrichten Geschichte (das Veröffentlichungsdatum) angezeigt werden sollen, eher als ein Zeitstempel-Feld , die von MySQL aktualisiert würde. Wir wollen keine Geschichten zeigen, wo die veröffentlichte Datum/Zeit größer als die aktuellen Systemzeitstempel (erlaubt Geschichten Embargo werden) wir die Abfrage erzeugen, wenn die Webseite geladen wird, so dass unsere Kriterien lesen so etwas wie:

where xorder IS NOT NULL 
AND xorder > 0 
AND xtimestamp <= 201604271800 (for 6pm today) 

(Dies ist etwas vereinfacht, da es andere Kriterien gibt).

Ich sortiere nach xtimestamp desc und xorder asc, und nur die ersten 4 Datensätze gefunden, aber das gibt sie nicht in der richtigen xorder.

Hoffe das macht Sinn, jede Hilfe geschätzt.

+0

also möchten Sie xorder von 1 - 4 bestellen? Fügen Sie einfach ORDER BY xorder ASC hinzu. – Matt

+0

Mögliches Duplikat von [Get top n records für jede Gruppe von gruppierten Ergebnissen] (http://stackoverflow.com/questions/12113699/get-top-n-records-for-each-group-of -grouped-ergebnisse) – Shadow

+0

order von xorder ASC holt mir alle 1s, dann alle 2s. Ich möchte die neueste 1, dann die neueste 2, dann die neueste 3 dann die neueste 4.By "neueste", ich meine das Xximestamp-Feld. –

Antwort

0

nehmen einen Blick auf die Schlüsselwörter order by und limit im select Kapitel in der SQL-Dokumentation

0

Die Antwort ist die Aussagen ALL UNION. Für mich waren dies 4 separate Select-Anweisungen mit jeweils einem Limit 1 und einer Verbindung zwischen ihnen. Es funktioniert, aber es scheint ein bisschen klobig.