FIELD() în MySQL

Returnează poziția unei valori într-o listă de argumente; util pentru sortări personalizate.

Sintaxă
FIELD(cauta, val1, val2, ...)

Ce face FIELD()

FIELD() caută primul argument printre celelalte și returnează poziția lui (de la 1). Dacă nu îl găsește, returnează 0.

Cea mai cunoscută utilizare este ORDER BY FIELD(...): sortezi rândurile într-o ordine aleasă de tine, nu alfabetic.

Parametri

Parametru Descriere
cauta Valoarea căutată.
val1, val2, ... Lista în care se caută.

Ce returnează

Poziția în listă sau 0.

Exemple

Exemplul 1: Poziția într-o listă

SELECT FIELD('Cluj', 'Iași', 'Cluj', 'Brașov') AS pozitie,
       FIELD('Arad', 'Iași', 'Cluj') AS lipsa;

Rezultat

+---------+-------+
| pozitie | lipsa |
+---------+-------+
|       2 |     0 |
+---------+-------+

Exemplul 2: Sortare într-o ordine stabilită de tine

CREATE TABLE comenzi (id INT, status VARCHAR(20));
INSERT INTO comenzi VALUES (1, 'livrata'), (2, 'noua'), (3, 'in_curs'), (4, 'noua');

SELECT id, status
FROM comenzi
ORDER BY FIELD(status, 'noua', 'in_curs', 'livrata'), id;

Rezultat

+------+---------+
| id   | status  |
+------+---------+
|    2 | noua    |
|    4 | noua    |
|    3 | in_curs |
|    1 | livrata |
+------+---------+

Greșeli frecvente

  • Valorile care nu sunt în listă primesc 0 și ajung primele la ORDER BY FIELD(...). Pune-le la final cu ORDER BY FIELD(...) = 0, FIELD(...).

Comenzi înrudite

  • ELT(): Returnează al N-lea argument dintr-o listă; inversul funcției FIELD().
  • FIND_IN_SET(): Caută o valoare într-un text cu elemente separate prin virgulă și returnează poziția.
  • ORDER BY: Ordonează rezultatele crescător (ASC) sau descrescător (DESC) după una sau mai multe coloane.