2017-03-10 3 views
-1

PROVIDER_ID 1,2,3 könnteMysql, um durch Feld gibt falsche Reihenfolge

SELECT * FROM `news` order by field (provider_id, 1,3) 

ich es zuerst Aufzeichnungen mit dem PROVIDER_ID = 1, dann 3 und nach dem sie mit dem PROVIDER_ID = 2

zeigen erwarten In real zeigt es zuerst alle Datensätze mit der provider_id = 2 und nur dann 1, 3

Wie schreibe ich richtige Abfrage, wenn ich zunächst nur 1 und 3 und nach ihnen alle die restlichen provider_id's Liste?

Antwort

2

Warum würden Sie das erwarten?

FIELD gibt den Index in der Liste, die den Wert des ersten Arguments übereinstimmt, und 0, wenn es nicht gefunden, so dass Ihre ORDER BY offensichtlich Zeilen sortieren mit provider_id nicht 1 oder 3 zuerst.

es zu testen, versuchen Sie einfach eine Spalte mit dem Wert von field (provider_id, 1,3) Zugabe, werden Sie selbst sehen:

SELECT *,field (provider_id, 1,3) FROM `news` order by field (provider_id, 1,3) 

Sie einfach DESC hinzufügen könnte (und möglicherweise 1 und 3 tauschen, wenn Sie wollen PROVIDER_ID = 1 zuerst):

SELECT * FROM `news` order by field (provider_id, 3, 1) DESC