Ícone do site Linha de Comando

MySQL: Quando usar a função FIELD() para ordenar resultados

Em algumas situações precisamos que o MySQL retorne registros exatamente na mesma ordem em que fornecemos os valores em uma lista. Nesses casos, a função FIELD() pode ser extremamente útil.

O Problema

Imagine que você precise buscar usuários específicos no banco, mas deseja que o resultado seja exibido exatamente na ordem informada na consulta.

Se utilizarmos apenas um ORDER BY tradicional, o MySQL irá ordenar por ordem numérica ou alfabética, e não pela sequência desejada.

Exemplo de consulta:

SELECT 
    username,
    CONCAT(firstname, ' ', lastname) AS nome_completo,
    idnumber
FROM user
WHERE username IN (10125008,10118396)
ORDER BY username;

O resultado será ordenado pelo valor do campo username, e não necessariamente na ordem desejada.

A Solução

Para resolver isso, podemos usar a função FIELD(). Ela permite definir explicitamente a ordem dos valores no ORDER BY.

Veja o exemplo:

SELECT 
    username,
    CONCAT(firstname, ' ', lastname) AS nome_completo,
    idnumber
FROM user
WHERE username IN (10125008,10118396)
ORDER BY FIELD(username, 10125008,10118396);

Nesse caso, o MySQL irá ordenar o resultado exatamente na sequência definida dentro da função FIELD().

Como funciona o FIELD()

A função retorna a posição do valor dentro da lista informada.

Exemplo simplificado:

SELECT FIELD(10118396, 10125008,10118396);

Resultado:

2

Ou seja:

O ORDER BY utiliza esse número para organizar o resultado.

Quando usar FIELD()

Alguns cenários comuns:

Conclusão

A função FIELD() é uma solução simples e eficiente quando você precisa controlar manualmente a ordem dos resultados no MySQL.

Ela evita soluções mais complexas e mantém a consulta clara e objetiva, principalmente quando a ordenação precisa seguir exatamente a sequência definida pela aplicação.

Sair da versão mobile