Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

Alfredo Braga

Select de valor mais proximo

Recommended Posts

Tenho a seguinte duvida, preciso fazer um select que me retorne o valor mais proximo do pesquisado.

 

EX:

O usuario digita "559832233444";

 

Mas no meu banco só tenho registrado os valores:

 

"5598"

"55983"

"559832"

 

O valor a ser retornado no caso seria o "559832" que é o que mais se aproxima de "559832233444". Seria como uma interseção....

 

Como fazer isso?

 

SELECT * FROM ligacoes WHERE prefixo MAIS_PROXIMO_DE "559832233444"

Compartilhar este post


Link para o post
Compartilhar em outros sites

Infelizmente esse select não funciona para minha busca

 

SELECT * FROM LIGACOES WHERE PREFIXO LIKE '559832233444%' LIMIT 1

 

como já havia dito no campo prefixo da minha tabela não existe o registro "559832233444" o mais proximo dele seria o "559832" como no exemplo acima.

 

O select deve buscar o campo mais proximo.

 

Mas qualquer forma obrigado.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Tentou com between ?

 

SELECT * FROM LIGACOES WHERE PREFIXO BETWEEN '5882 ' AND '5882ZZZZZ'

Supondo um campo Alfa.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Motta,

 

Obrigado pela ajuda mas não deu certo.

 

Preciso de um select que me retorne o valor mais proximo do buscado. Imagine o seguinte:

 

No meu banco de dados eu tenho os produtos

 

"Sabão"

"Sabão em pó"

"Sabão em barras"

 

O usuario realiza uma busca por "Sabão em pó neutro" (que não está cadastrado no banco). Evidentemente utilizando um select com like não ira me retornar nada pois não existe esse registro no banco. Mas existe no banco o registro "Sabão em pó" que MAIS SE APROXIMA da busca realizada pelo usuario. Observe:

 

 

BUSCA

 

"Sabão em pó neutro"

 

"Sabão"

"Sabão em pó" <---- MAIS PROXIMO DA BUSCA ("Sabão em pó neutro")

"Sabão em pó em barras"

 

É ESSE CAMPO QUE EU QUERO RETORNAR NA QUERY.

Compartilhar este post


Link para o post
Compartilhar em outros sites

A gente já entendeu o que você quer. E já postamos. É um dos 3 selects abaixo.

 

h4v3st

SELECT * FROM LIGACOES WHERE PREFIXO LIKE '%559832233444%' LIMIT 1

Dee

SELECT * FROM LIGACOES WHERE PREFIXO LIKE '559832233444%' LIMIT 1

Dee

SELECT * FROM LIGACOES WHERE PREFIXO LIKE '%559832233444' LIMIT 1

O primeiro e o segundo SELECT é para funcionar.

Ou você está fazendo algo errado ou comendo bola.

 

OBS:

Sabão em pó é diferente de Sabao em po no banco de dados. Se você colocar no SELECT uma coisa para procurar outra você não vai obter resultados. Ele leva em consideração os acentos. Maiusculas e minusculas ele ignora, mas acentos não.

 

Tenta esse daqui:

 

SELECT * FROM LIGACOES WHERE PREFIXO LIKE '559832233444%' ORDER BY PREFIXO ASC LIMIT 1

 

Editei meu POST!

Compartilhar este post


Link para o post
Compartilhar em outros sites

Crie uma FUNCTION que dado duas strings dê uma nota de 0 a 1 da semelhança entre elas.

 

Sabão em pó neutro"

 

"Sabão" x "Sabão em pó neutro"

5 igualdades em

uma string base de 18 carac.

5/18 = 0,28

 

"Sabão em pó" x "Sabão em pó neutro"

11/18 = 0,61

 

"Sabão em pó em barras" x "Sabão em pó neutro"

Aqui há diferenca posterior de 7 ( em barras x neutro)

(12-7)/18

5/18 = 0,27

 

 

Depois e só ordenar pelo result da function em ordem descendente.

Claro que a ideia está tosca, precisa de uma refinada.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Olha, acredito que para o seu caso o melhor será utilizar um índice full text.

 

http://dev.mysql.com/doc/refman/5.0/en/fulltext-search.html

 

Carlos Eduardo

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.