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:
- 10125008 → posição 1
- 10118396 → posição 2
O ORDER BY utiliza esse número para organizar o resultado.
Quando usar FIELD()
Alguns cenários comuns:
- Ordenar resultados conforme uma lista de IDs recebida via aplicação
- Manter a ordem de resultados de uma busca externa
- Ordenação personalizada sem precisar criar uma tabela auxiliar
- Reproduzir exatamente a ordem de parâmetros enviados pelo usuário
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.