2016-07-20 10 views
1

Angenommen, meine Frage ist -Mysql Sortieren funktionsfähige Produkte nach dem Zufall, sondern normale Produkte nach Datum

SELECT * FROM products ORDER BY is_featured DESC, created_date DESC 

Wo is_featured ein Flag-Feld in der Tabelle ist, die entweder 1 oder 0, Seine offensichtliche die obige Abfrage zurückgibt Reihe von Aufzeichnungen halten mit allen vorgestellten Produkten auf dem ersten (die neuesten unter der kommt zuerst) und dann den normalen Produkte (die neuesten unter denen an erster Stelle).

Meine Frage: Wie können wir umschreiben folgt die obige Abfrage so dass Ausgewählte Produkte an erster Stelle (aber wird zufällig) und dann die normalen Produkte (nach Erstellungsdatum sortiert).

Ich kann die mögliche Antwort zwei separate Abfragen schreiben sein erfassen und die resultset verbinden und durch die Schleife durchlaufen Produkte anzuzeigen. Aber fragen, kann es über einzelne Abfrage erreicht werden?

Antwort

2

Ein Weg, was ich denken konnte, eine andere berechnete Ausdruck der order by Klausel hinzuzufügen, die einen zufälligen Wert für funktionsfähige Produkte und eine Konstante für andere Produkte gibt, so dass es wirkt sich nicht auf die Reihenfolge:

SELECT * 
FROM  products 
ORDER BY is_featured DESC, 
     CASE is_featured 
       WHEN 1 THEN RAND() 
       ELSE 1 -- Or some other constant 
     END, 
     created_date DESC 
+0

ich habe mysql Fehler in der Nähe von ' 'aLS RAND()' – WatsMyName

+0

@WatsMyName dumm Tippfehler :-(‚DANN‘. Herausgegeben und fixiert Sollten wurden. – Mureinik

+0

Ja mein Fehler und ich es als ‚DANN‘ lesen. Danke Kumpel es funktionierte – WatsMyName