Usamos cookies para medir audiência e melhorar sua experiência. Você pode aceitar ou recusar a qualquer momento. Veja sobre o iMasters.
Boa tarde.
estou tendo o seguinte problema
preciso encontrar certas palavras em um campo varchar.
ex.
"Eu fui ao casamento";
"Minha casa e azul";
"Eu e minha namorada somos um casal";
se eu fizer um where like "%casa%"
as tres linhas serao encontradas.
eu gostaria de encontrar apenas a segunda. que contem a palavra que desejo encontrar "casa";
nao posso usar a funcao match, pq nao tem como eu alterar a minha tabela para MylSan. uma vez que isso irá interferir em todo o banco e este já trabalha em produção;
teria uma forma de eu fazer isso no MYSQL? ao invés de ter que procurar no PHP?
tentei usar o regexp, mas nao obtive sucesso. talvez por nao ser muito bom em criar linhas de comando de expressoes regulares.
Entao motta,
como eu disse, usar o metodo full text está inviável.
uma vez que para isso minha tabela deve ser MylSan, e eu nao posso modificá-la, pq isso implicará em muitas alterações que não poderei fazer nas tabelas.
existe uma outra forma?
post #3 do link passado.
Usando instr no order by para trazer os itens mais relevantes.
+OU- ISTO
SELECT *
FROM TABELA
WHERE (INSTR(CAMPO,'%ouviram%') > 0 or
INSTR(CAMPO,'%ipiranga%') > 0 or
INSTR(CAMPO,'%margens%'))
order by (SIGN(INSTR(CAMPO,'%ouviram%')) +
SIGN(INSTR(CAMPO,'%ipiranga%')) +
SIGN(INSTR(CAMPO,'%margens%')))
"% casa %" OR "% casa" OR "casa %"
gambi?
Não vejo como gambiarra.
O certo seria usar a estrutura que permita o Full Text , a SQL é uma solução que permite trazer os resultados mais revelantes antes.
Na verdade faltou um DESC na "gambi"
Entendi agora o "branco" depois de casa.
A ideia que postei e para busca de mais de uma palavra num texto.
http://forum.imasters.com.br/topic/490708-consulta-por-relevancia-mysql/#entry1950568