Jump to content
Fórum Script Brasil
  • 0
Sign in to follow this  
juliano.ma

(Resolvido) Exibir Resultado De Busca Da "próxima Coluna

Question

Olá amigos!

já postei essa pergunta no fórum de PHP, mas acho que a solução deve estar no código do MySql.

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!

Edited by juliano.ma

Share this post


Link to post
Share on other sites

4 answers to this question

Recommended Posts

  • 0

Oi, 'juliano.ma'!

Tente assim:

SELECT nome, IF(color1 = "verde", color1perc, IF(color2 = "verde", color2perc, IF(color3 = "verde", color3perc, 0)))
FROM tabela;

Ver Manual MySQL versão 4.1 capítulo 6

Share this post


Link to post
Share on other sites
  • 0
De qual modo fica mais leve para a execução, do meu jeito ou o que o você sugeriu?

Ambos os modos vão varrer toda a tabela. A vantagem do meu modo sobre o seu éstá na liberação da cláusula where que pode ser ulitizada em outra finalidade sem prejudicar a performance da pesquisa.

Edited by Denis Courcy

Share this post


Link to post
Share on other sites
  • 0
De qual modo fica mais leve para a execução, do meu jeito ou o que o você sugeriu?

Ambos os modos vão varrer toda a tabela. A vantagem do meu modo sobre o seu éstá na liberação da cláusula where que pode ser ulitizada em outra finalidade sem prejudicar a performance da pesquisa.

Desculpe ter bagunçado sua resposta. pode postar novamente, por favor?

Share this post


Link to post
Share on other sites
  • 0

Não esquenta a cabeça amigo!

Re-post:

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%)

Share this post


Link to post
Share on other sites
Guest
This topic is now closed to further replies.
Sign in to follow this  

Cloud Computing


  • Forum Statistics

    • Total Topics
      148601
    • Total Posts
      644297
×
×
  • Create New...