Mysql
 sql >> Base de Dados >  >> RDS >> Mysql

Classificação alfabética avançada do MySQL com prefixo?


Você poderia fazer isso:
ORDER BY IF(SUBSTRING(name, 1, 14) = 'University of ', SUBSTRING(name, 15), name)

Pode ser uma boa ideia criar uma visão sobre esta tabela projetando um name_value extra coluna definida como IF() expressão acima. Então você pode ordenar por esta coluna e selecioná-la sem ter que poluir suas consultas com IF() .

Exibição de exemplo, supondo que o nome da universidade esteja armazenado na coluna name :
CREATE VIEW Universities AS
    SELECT
        list_universities.*,
        IF(SUBSTRING(name, 1, 14) = 'University of ',
           SUBSTRING(name, 15),
           name) AS name_value
    FROM list_universities;

Então você pode selecionar Universities da mesma forma que você faz em list_universities , exceto que terá um name_value extra coluna que você pode selecionar, ou ordenar, ou qualquer outra coisa.

Observe que esta abordagem (assim como ORDER BY IF(...) ) não poderá usar nenhum índice em name para melhorar o desempenho do tipo.