Usamos cookies para medir audiência e melhorar sua experiência. Você pode aceitar ou recusar a qualquer momento. Veja sobre o iMasters.
Prezados,
Quero saber se é possível efetuar uma consulta e ordenar os resultados pelo critério da pesquisa? Vou tentar explicar com um exemplo:
Vamos supor que eu tenha uma tabela com os seguintes registros:
id | nome
1 | Celular Samsung
2 | Celular Nokia
3 | Celular Motorola
Então resolvo executar a seguinte consulta:
SELECT nome FROM tabela WHERE nome LIKE '%celular samsung%' OR nome LIKE '%celular%' OR nome LIKE '%samsung%' ORDER BY nome;
Como resultado da consulta acima, teremos:
1ª posição: Celular Motorola
2ª posição: Celular Nokia
3ª posição: Celular Samsung
A ordem do resultado da pesquisa eu considero incorreto, pois a frase pesquisada é "celular samsung" e este deveria aparecer logo no início da consulta, mas não foi o que aconteceu.
Então fiz um ajuste na consulta:
SELECT nome FROM tabela WHERE nome LIKE '%celular samsung%' OR nome LIKE '%celular%' OR nome LIKE '%samsung%' ORDER BY nome LIKE '%celular samsung%' DESC, nome;
Como resultado do ajuste no ORDER BY, teremos:
1ª posição: Celular Samsung
2ª posição: Celular Motorola
3ª posição: Celular Nokia
Resolvido? Não exatamente pois, essa solução que fiz (até que me provem o contrário) eu considero uma gambiarra. Existe uma maneira correta de se resolver este problema? Ou esta é a maneira correta?
Tente assim... Para cada contexto, haverá uma consulta (sem order), tal como:
SELECT nome FROM tabela WHERE nome LIKE '%celular samsung%'
union
SELECT nome FROM tabela WHERE nome LIKE '%celular%'
union
SELECT nome FROM tabela WHERE nome LIKE '%samsung%'