Ir para conteúdo

POWERED BY:

Arquivado

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

Edson Souza

Busca usando LIKE em duas colunas em uma tabela

Recommended Posts

Ola!

 

Estou com certo problema em fazer a busca em duas colunas na mesma tabela,

 

Tentei fazer da seguinte forma:

 

$sql6=mysql_query("select * from CADPRODUTO_MEDIDA where MEDIDA LIKE '%$descricao%' or VALOR LIKE '%$descricao%'");

 

Porém não deu certo, tentei:

 

$sql6=mysql_query("select * from CADPRODUTO_MEDIDA where MEDIDA or VALOR LIKE '%$descricao%'");

 

Mas ele só funciona se a busca for em apenas uma coluna!

 

Será que alguém pode me ajudar?

Compartilhar este post


Link para o post
Compartilhar em outros sites

A primeira sql parece correta.

 

Pode ser um problema de tipos, MEDIDA e VALOR são numéricos ?!

 

fazer uma busca com like talvez requeira conversão de tipo.

Compartilhar este post


Link para o post
Compartilhar em outros sites

A primeira sql parece correta.

 

Pode ser um problema de tipos, MEDIDA e VALOR são numéricos ?!

 

fazer uma busca com like talvez requeira conversão de tipo.

 

 

Então ambos são Varchar(255), estranho se eu faço a busca com um valor que estar na coluna "valor" ele busca sem problemas, mas se eu faço uma busca que esta em "Medida" ele não retorna nada.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Não faz sentido, deve haver alguma diferença entre os campos.

 

select * 
from CADPRODUTO_MEDIDA 
where (MEDIDA LIKE '%123%' or VALOR LIKE '%123%')

Compartilhar este post


Link para o post
Compartilhar em outros sites

Não faz sentido, deve haver alguma diferença entre os campos.

 

select * 
from CADPRODUTO_MEDIDA 
where (MEDIDA LIKE '%123%' or VALOR LIKE '%123%')

 

De fato não faz sentido, ele não retornar de um e retornar de outro. Na tabela esta assim:

 

Textos completos 	ID 	ID_PRODUTO 	MEDIDA 	VALOR 	WEB
Editar 	Remover 	5195 	1 	L1 	4,0 	T
Editar 	Remover 	5196 	1 	D1 	2,7 	T
Editar 	Remover 	5197 	1 	ANGULO 	60 	T
Editar 	Remover 	5198 	1 	ROSCA 	M2 X 0.4 	T
Editar 	Remover 	5199 	1 	CHAVE 	TORKS 06 	T
Editar 	Remover 	5201 	2 	L1 	4,8 	T
Editar 	Remover 	5202 	2 	D1 	2,7 	T
Editar 	Remover 	5203 	2 	ANGULO 	60 	T
Editar 	Remover 	5204 	2 	ROSCA 	M2 X 0.4 	T
Editar 	Remover 	5205 	2 	CHAVE 	TORKS 06 	T
Editar 	Remover 	5207 	3 	L1 	5,0 	T
Editar 	Remover 	5208 	3 	D1 	2,7 	T
Editar 	Remover 	5209 	3 	ANGULO 	60 	T
Editar 	Remover 	5210 	3 	ROSCA 	M2 X 0.4 	T
Editar 	Remover 	5211 	3 	CHAVE 	TORKS 06 	T
Editar 	Remover 	5213 	4 	L1 	12,0 	T
Editar 	Remover 	5214 	4 	D1 	2,7 	T

 

 

E como eu disse Varchar

 

	MEDIDA 	varchar(255) 	latin1_swedish_ci 		Sim 	NULL 		Navegador distingue valores 	Alterar 	Eliminar 	Primária 	Único 	Índice 	Texto completo
VALOR 	varchar(255) 	latin1_swedish_ci 		Sim 	NULL

Compartilhar este post


Link para o post
Compartilhar em outros sites

No seu exemplo

 

select * 
from CADPRODUTO_MEDIDA 
where (MEDIDA LIKE '%CHAVE%' or VALOR LIKE '%CHAVE%')

 

Retornaria

 

Textos completos        ID      ID_PRODUTO      MEDIDA  VALOR   WEB
       Editar  Remover         5199    1       CHAVE   TORKS 06        T
       Editar  Remover         5205    2       CHAVE   TORKS 06        T
       Editar  Remover         5211    3       CHAVE   TORKS 06        T

 

select * 
from CADPRODUTO_MEDIDA 
where (MEDIDA LIKE '%2,7%' or VALOR LIKE '%2,7%')

 

Retornaria

 

Textos completos        ID      ID_PRODUTO      MEDIDA  VALOR   WEB
       Editar  Remover         5196    1       D1      2,7     T
       Editar  Remover         5202    2       D1      2,7     T
       Editar  Remover         5208    3       D1      2,7     T
       Editar  Remover         5214    4       D1      2,7     T

Compartilhar este post


Link para o post
Compartilhar em outros sites

No seu exemplo

 

select * 
from CADPRODUTO_MEDIDA 
where (MEDIDA LIKE '%CHAVE%' or VALOR LIKE '%CHAVE%')

 

Retornaria

 

Textos completos        ID      ID_PRODUTO      MEDIDA  VALOR   WEB
       Editar  Remover         5199    1       CHAVE   TORKS 06        T
       Editar  Remover         5205    2       CHAVE   TORKS 06        T
       Editar  Remover         5211    3       CHAVE   TORKS 06        T

 

select * 
from CADPRODUTO_MEDIDA 
where (MEDIDA LIKE '%2,7%' or VALOR LIKE '%2,7%')

 

Retornaria

 

Textos completos        ID      ID_PRODUTO      MEDIDA  VALOR   WEB
       Editar  Remover         5196    1       D1      2,7     T
       Editar  Remover         5202    2       D1      2,7     T
       Editar  Remover         5208    3       D1      2,7     T
       Editar  Remover         5214    4       D1      2,7     T

 

 

Teóricamente era para retornar esses valores mesmo, creio então que tenha algum erro no meu código vou postar aqui:

 

if (mysql_num_rows($sql4)==0) {
			$sql6=mysql_query("select * from CADPRODUTO_MEDIDA where (MEDIDA LIKE '%$descricao%' or VALOR LIKE '%$descricao%')");
			if (mysql_num_rows($sql6)>0) {
				echo "<tr><td colspan=\"3\"><h2> </h2></td></tr>";
				echo "<tr><td colspan=\"3\"><h2>Por MEDIDA</h2></td></tr>";
				echo "<tr><td colspan=\"3\"><h2> </h2></td></tr>";
				echo "<tr><td colspan=\"1\"><p>MEDIDA</p></td><td colspan=\"1\"><p>Produtos Fixotork</p></td><td colspan=\"1\"><p>Produtos Fixotork</p></td></tr>";
				//echo "<tr><td colspan=\"1\"><p>MEDIDA</p></td><td colspan=\"2\"><p>Produto Fixotork</p></td></tr>";
				echo "<tr><td colspan=\"3\"><h2> </h2></td></tr>";
				while ($row3 = mysql_fetch_array($sql6))
				{
					$id_temp=$row3['ID_PRODUTO'];
					$sql_temp=mysql_query("select * from CADPRODUTO where ID = '$id_temp'");
					$row_temp=mysql_fetch_array($sql_temp);

				$sqlmedida = mysql_query("select * from CADPRODUTO_MEDIDA where ID_PRODUTO = '$id_temp'");
			//echo "<p style=\"font-size:14px; font-style:italic;\">Medidas</p>";
		while ($medida = mysql_fetch_array($sqlmedida))
			{


			//-----------------------teste  fabricante 

				$sqlsimilarl = mysql_query("select * from CADPRODUTO_SIMILAR where ID_PRODUTO = ".$row_temp['ID']."");
			//echo "<p style=\"font-size:14px; font-style:italic;\">Similares e Fabricantes</p>";
			while ($similarl = mysql_fetch_array($sqlsimilarl))
			{
				$fabricantel = $similarl['ID_FABRICANTE'];
				$sqlfabricantel = mysql_query("select * from FABRICANTE where id = '$fabricantel'");
				$aux = mysql_fetch_array($sqlfabricantel);
				$fabricantel = $auxl['fantasia'];

			}


				///-----------


					echo "<tr><td width=\"30%\" ><a href=\"produto.php?idproduto=".$row_temp['ID']."\"> ".$medida['MEDIDA'].": ".$medida['VALOR']."</a></td><td width=\"40%\" ><a href=\"produto.php?idproduto=".$row_temp['ID']."\"><p style=\"font-size: 16px;\">".$row_temp['DESCRICAO']."</p></td><td width=\"30%\" ><a href=\"produto.php?idproduto=".$row_temp['ID']."\">Ferramentas padrão ".$auxl['fantasia']."</a></td></tr>";	

 

Essa linha :

$sql6=mysql_query("select * from CADPRODUTO_MEDIDA where (MEDIDA LIKE '%$descricao%' or VALOR LIKE '%$descricao%')"

Eu coloquei com parenteses só para um teste

 

O correto esta :

 

$sql6=mysql_query("select * from CADPRODUTO_MEDIDA where MEDIDA LIKE '%$descricao%' or VALOR LIKE '%$descricao%'"

Compartilhar este post


Link para o post
Compartilhar em outros sites

Só não entendi o seguinte a natureza dos contepudos das colunas é diverso , qual o motivo do OR ?

 

Não conheço PHP, não sei avaliar seu código.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Só não entendi o seguinte a natureza dos contepudos das colunas é diverso , qual o motivo do OR ?

 

Não conheço PHP, não sei avaliar seu código.

 

 

O "Or" é para que ele possa fazer a busca em nas duas colunas, esta errado? Se estiver por favor me corrija!

Esses dados são medidas de parafusos especiais.

Compartilhar este post


Link para o post
Compartilhar em outros sites

E que MEDIDA tem coisas como: ANGULO/ ROSCA / CHAVE

e VALOR coisas como 4,0 / 2,7 / 60

não vejo o motivo da mesma chave de busca está nas duas pesquisas.

 

Mas o OR serve mesmo para busca nas duas colunas.

 

Faria mais sentido para mim algo como :

 

select *
from clientes
where (primeiro_nome like '%EDSON%' OR ultimo_nome like '%EDSON%')

Compartilhar este post


Link para o post
Compartilhar em outros sites

Eu precisava buscar um texto em duas colunas de uma tabela e o retorno seria em qual produto o texto estaria presente, resolvi assim:

 

SELECT *

FROM paginas

WHERE paginas.pagina_conteudo LIKE %nome% OR (paginas.pagina_nome LIKE %nome%)

 

onde nome:

 

Name: nome

Type: Text

Default Value: -1

Run-time value: $_GET['ProdutoAdmin']

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.