Ir para conteúdo
Fórum Script Brasil
  • 0

Termos compostos


Renato Penna

Pergunta

Boa tarde. Eu estou tentando fazer um SELECT no MySQL pra pegar ocorrências de termos compostos em alguns campos na tabela. A situação é a seguinte:

O cara vai fazer uma busca no site e tem que achar todas as palavras que ele usou na busca, mesmo que ele tenha escrito e as ocorrências que tem as palavras que ele buscou tem que vir antes.

Por exemplo: Existe um produto chamado cama suspensa para cães cooraloo. Então se ele buscar por exemplo por cama cooraloo ou por cooraloo cama tem que achar.

Então eu fiz assim:

SELECT ItemID, ItemName, ItemDescription FROM Items WHERE ItemName LIKE '%CAMA%' OR ItemName LIKE '%COORALOO%' OR ItemDescription LIKE '%CAMA%' OR ItemDescription LIKE '%COORALOO%' OR LongDescription LIKE '%CAMA%' OR LongDescription LIKE '%COORALOO%') AND Estoque = 'S'

Desse jeito, aparece o produto independente da forma como o usuário escreve. Minha dúvida agora é a seguinte: Como eu faço para que os produtos que tenham os nomes pesquisados pelo usuário apareçam primeiro ? Porque neste exemplo, existem outros produtos que começam com "cama" e que aparecem antes deste ítem.

Espero que tenha dado pra entender o que eu preciso. Agradeço desde já.

Link para o comentário
Compartilhar em outros sites

3 respostass a esta questão

Posts Recomendados

  • 0

SELECT 
    ItemID, ItemName, ItemDescription,
    (ItemName LIKE '%CAMA%') +
    (ItemName LIKE '%COORALOO%') +
    (ItemDescription LIKE '%CAMA%') +
    (ItemDescription LIKE '%COORALOO%') +
    (LongDescription LIKE '%CAMA%') +
    (LongDescription LIKE '%COORALOO%')
    as total    
FROM Items 
WHERE 
    (
    ItemName LIKE '%CAMA%' 
    OR ItemName LIKE '%COORALOO%' 
    OR ItemDescription LIKE '%CAMA%' 
    OR ItemDescription LIKE '%COORALOO%' 
    OR LongDescription LIKE '%CAMA%' 
    OR LongDescription LIKE '%COORALOO%'
    ) 
    AND Estoque = 'S'
order by total desc

No mysql o resultado de uma expressão lógica é 1 se verdadeira ou zero se falsa. Então basta somar os resultados.

Editado por Kakao
Link para o comentário
Compartilhar em outros sites

  • 0
Deu certo, obrigado!

Pesquise por indices FULLTEXT. São mais eficientes que o LIKE e não causam TABLE SCAN.

Exemplo:

Pesquisa full-text é realizada com a função MATCH().

mysql> CREATE TABLE articles (
-> id INT UNSIGNED AUTO_INCREMENT NOT NULL PRIMARY KEY,
-> title VARCHAR(200),
-> body TEXT,
-> FULLTEXT (title,body)
-> );
mysql> INSERT INTO articles VALUES
-> (NULL,'MySQL Tutorial', 'DBMS stands for DataBase ...'),
-> (NULL,'How To Use MySQL Efficiently', 'After you went through a ...'),
-> (NULL,'Optimizing MySQL','In this tutorial we will show ...'),
-> (NULL,'1001 MySQL Tricks','1. Never run mysqld as root. 2. ...'),
-> (NULL,'MySQL vs. YourSQL', 'In the following database comparison ...'),
-> (NULL,'MySQL Security', 'When configured properly, MySQL ...');

mysql> SELECT * FROM articles
-> WHERE MATCH (title,body) AGAINST ('database');
+----+-------------------+------------------------------------------+
| id | title | body |
+----+-------------------+------------------------------------------+
| 5 | MySQL vs. YourSQL | In the following database comparison ... |
| 1 | MySQL Tutorial | DBMS stands for DataBase ... |
+----+-------------------+------------------------------------------+
2 rows in set (0.00 sec)

Link para o comentário
Compartilhar em outros sites

Participe da discussão

Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.

Visitante
Responder esta pergunta...

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emoticons são permitidos.

×   Seu link foi incorporado automaticamente.   Exibir como um link em vez disso

×   Seu conteúdo anterior foi restaurado.   Limpar Editor

×   Você não pode colar imagens diretamente. Carregar ou inserir imagens do URL.



  • Estatísticas dos Fóruns

    • Tópicos
      152,3k
    • Posts
      652,5k
×
×
  • Criar Novo...