Ir para conteúdo

POWERED BY:

Arquivado

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

juliano.ma

Exibir Resultado De Busca da "próxima coluna.

Recommended Posts

Olá amigos!

 

 

Considerem a seguinte tabela mySQL;

 

id .... nome ...... color1 ....... color1perc ..... color2 ...... color2perc ..... color3 .... color3perc

 

01 ... João ....... branco ........... 5% ................ verde ........ 10% ......... preto ....... 105%

02 ... Pedro ..... roxo ............... 22% .............. azul .......... 15% ......... verde ....... 50%

03 ... Jorge ...... cinza .............. 25% ............. branco ...... 0,9% ........ azul .......... 100%

04 ... Carlos .... marrom .......... 54% ............. azul ........... 60% ......... roxo ......... 80%

05 ... José ........ verde ............ 30% ............ cinza .......... 65% .........branco ..... 70%

 

Nesse caso eu estou buscando os nomes que contem a cor verde e gostaria de obter o seguinte resultado:

 

João - 10%

Pedro - 50%

José - 30%

 

Então quando eu fizesse a busca pela cor verde o resultado me retornaria o nome e o percentual:

 

Olhem oque eu já tentei:

 

<?php
include 'config.php';
$palavra = $_GET['palavra'];
$sql3 = mysql_query("SELECT * FROM tabela WHERE color1='$palavra ' OR color2='$palavra ' OR color3='$palavra ' OR color4='$palavra ' OR color5='$palavra ' OR color6='$palavra '");
while($reg = mysql_fetch_array($sql3)) {
$i = 0;
++$i;
$percent = "$palavra".$i."%";
echo $reg['nome'];
echo "<br>";
echo $reg["$percent"];
echo "<br>";
}
?>

Mas assim não retorna o resultado esperado.

 

Já me deram a dica de usar a função FIELD() mas dei uma lida no manul e não entendi direito.

 

Comoeu poderia implementar isso?

 

Grande abraço!

Compartilhar este post


Link para o post
Compartilhar em outros sites

Antes de responder gostaria de me manifestar: essa tabela esta toda descacetada , normalizaçao nota zero...

 

 

select

nome ,

CONCAT (

if (color1 = 'verde' , colorperc1, NULL) ,

if (color2 = 'verde' , colorperc2, NULL) ,

if (color3 = 'verde' , colorperc3, NULL)

) as percento

from tabela_colorida

where CONCAT(color1,' ',color2,' ',color3) like '%verde%'

 

 

 

Isso assumindo q a mesma cor nao exista duas vezes na mesma linha

Compartilhar este post


Link para o post
Compartilhar em outros sites

so ratificando o que o giesta falou sobre a normalização

 

seria mais correto e facilitaria muito mais o seu trabalho a normalização

 

seria simples

 

em vez de uma tabela como está voce criaria outras duas

 

Tabela de Nomes

Id | Nome

 

Tabela de Cores

Id | Cor

 

Tabela de Relacionamento

Id_Nome | Id_Cor | Percento

 

Nesta ultima tabela voce teria tantas linhas forem necessaria para cada nome e cor diferentes informando o %

 

Assim nao ha desperdicio de espaço no db e ainda facilita o seu trabalho posterior

Compartilhar este post


Link para o post
Compartilhar em outros sites

Obrigado por terem respondido.

 

Bom, acabei resolvendo sozinho...

 

pior que não tava dificil, era só pensar um pouco...

 

ta ai pra quem quiser o exemplo:

 

<?php
include 'config.php';
$palavra = $_GET['palavra'];
$sql3 = mysql_query("SELECT * FROM tabela WHERE color1='$palavra ' OR color2='$palavra ' OR color3='$palavra ' OR color4='$palavra ' OR color5='$palavra ' OR color6='$palavra '");
while($reg = mysql_fetch_array($sql3)) {

echo $reg[nome] " (";   

if ($reg[color1] == $palavra) {echo $reg[color1perc];} 
elseif ($reg[color2] == $palavra) {echo $reg[color1perc];} 
elseif ($reg[color3] == $palavra) {echo $reg[color3perc];} 
elseif ($reg[color4] == $palavra) {echo $reg[color4perc];} 
elseif ($reg[color5] == $palavra) {echo $reg[color5perc];}
elseif ($reg[color6] == $palavra) {echo $reg[color6perc];}  
else {}
echo "%),  ";
}
?>

 

Resultado =

 

João (10%)

Pedro (50%)

José (30%)

 

 

De qual modo fica mais leve para a execução, do meu jeito ou o que o giesta sugeriu?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Com o DB normalizado com ceerteza ficaria tudo mais simples

 

Em seus trabalhos futuros tente levar em consideração isso e verá a simplidade que um problema como esse se transformará

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.