TIL: MySQLs ORDER BY FIELD() Syntax

Tags:

Folgende Tabelle:

CREATE TABLE IF NOT EXISTS `field_sorting` (
  `id` smallint(6) NOT NULL,
  `value` varchar(1) NOT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

INSERT INTO `field_sorting` (`id`, `value`)
VALUES (1, 'A'), (2, 'B'), (3, 'C'),
       (4, 'D'), (5, 'E'), (6, 'F');
IDValue
1A
2B
3C
4D
5E
6F

Ich möchte die Datensätze B, F, C. Und zwar in dieser Reihenfolge. Kein Problem.

SELECT *
FROM field_sorting
WHERE value IN ('B', 'F', 'C')
ORDER BY FIELD(value, 'B', 'F', 'C') ASC
IDValue
2B
6F
3C

Was aber, wenn ich diese drei Datensätze in dieser bestimmten Reihenfolge einfach nur am Anfang des Resultates haben möchte. Folgendes scheint nicht zu funktionieren.

SELECT *
FROM field_sorting
ORDER BY FIELD(value, 'B', 'F', 'C') ASC
IDValue
1A
4D
5E
2B
6F
3C

Was wir tun müssen, ist, absteigend sortieren und die Reihenfolge in der FIELD() Funktion umdrehen.

SELECT *
FROM field_sorting
ORDER BY FIELD(value, 'C', 'F', 'B') DESC
IDValue
2B
6F
3C
1A
4D
5E

Natürlich lassen sich wie gewohnt mehrere ORDER BY Felder angeben.

SELECT *
FROM field_sorting
ORDER BY FIELD(value, 'C', 'F', 'B') DESC, value DESC
IDValue
2B
6F
3C
5E
4D
1A

Ähnliche Artikel

Kommentare