guh.me - gustavo's personal blog

Ordenação condicional no MySQL

Esses dias encontrei uma consulta com uma penca de JOINs e precisava ordená-la por nome - no entanto, haviam duas colunas que representavam nome (pc.company_name, pi.fullname). Para cada linha, uma dessas colunas seria nula, então seria preciso estabelecer uma condição na cláusula ORDER BY.

Difícil? Não, extremamente fácil.

SELECT *
FROM `table`
ORDER BY
    CASE
        WHEN 'condição' THEN 'coluna'
        WHEN 'condição' THEN 'coluna'
    END 'direção'

A consulta final ficou, de forma simplificada, assim:

SELECT *
FROM `table`
ORDER BY
    CASE
        WHEN `pi`.`fullname` IS NOT NULL THEN `pi`.`fullname`
        WHEN `pc`.`company_name` IS NOT NULL THEN `pc`.`company_name`
    END ASC