Ir para conteúdo

POWERED BY:

Arquivado

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

drhouse

Não repetir resultado

Recommended Posts

Olá amigos tudo bem, sequinte estou com uma duvida gostaria de saber se e possivel e se alquem te a solução, problema e tenho duas tabelas com os sequintes campos

 

EX: Tabela 1

 

----------------

ini | cidade

----------------

1 | 1

----------------

2 | 1

----------------

3 | 2

----------------

4 | 3

----------------

5 | 3

----------------

6 | 2

----------------

 

EX: Tabela 2

 

----------------

ini | tb_cat

----------------

1 | a

----------------

2 | b

----------------

3 | c

----------------

4 | d

----------------

5 | e

----------------

6 | f

----------------

 

Nos exemplo acima tenho 2 tabelas uma de cidade e outra de categoria estou tentando pegar os resultados repetidos de cidade como em GROUP BY agrupar eles e ter um resultado unico para poder separar as categoria por ini em tb_cat veja o exemplo do resultado abaixo que seria mostrado.

 

em na tabela cidade teriamos o resultado de

 

1, 2 e 3 encontrado.

 

apos encontrado ele pega os resultado na tabela categoria pela cidade encontrada.

 

a, b e c.

 

tenho o codigo abaixo desenvolvido poderia estar analisando e identificando onde estou errando por não obter o resultado desejado como no exemplo acima.

 

Codigo...

 

<?php

$cidade = $_POST['cidade'];

$sql = "SELECT cidade FROM anuncio WHERE cidade = '$cidade' GROUP BY cidade";
$qr = mysql_query($sql) or die(mysql_error());
$qr2 = mysql_num_rows($qr);

$cidade = $qr2['cidade'];

$sql = "SELECT * FROM tb_cat WHERE ini = '$cidade' ORDER BY nome ASC";
$qr = mysql_query($sql) or die(mysql_error());

if(mysql_num_rows($qr) == 0){
   echo  '<option value="0">'.htmlentities('Não há categorias').'</option>';

}else{
   while($ln = mysql_fetch_assoc($qr)){
      echo '<option value="'.$ln['subcat'].'">'.$ln['nome'].'</option>';
   }
}

?>

Compartilhar este post


Link para o post
Compartilhar em outros sites

O exemplo seria assim

 

1 - Busco na tabela 1 por "MG" percorro toda há tabela e verifico qual categorias estão disponivel para "MG", O resultado seria: "MG: 1, 1, 2, 2" e com o GROUP BY "Pesquisei que com ele e possivel agrupar resultados" agrupo os resultados repetidos, com os resultados agrupado o valor final ficaria como "MG: 1, 2", com o resultado final agrupado agora busco em tabela 2 em ini para comparar com o valor da categoria encontrado na tabela 1 em categoria valores "1, 2".

 

EX: Tabela 1

 

------------------------

ini_|_estado_|_categoria

1___|_MG_____|_1

2___|_MG_____|_1

3___|_MG_____|_2

4___|_SP_____|_3

5___|_RJ_____|_3

6___|_MG_____|_2

7___|_MG_____|_1

------------------------

 

2 - Com os valore agrupados para o estado buscado "MG: 1, 2" busco na tabela 2 em ini para ser carregado em

echo '<option value="'.$ln['subcat'].'">'.$ln['nome'].'</option>';
os valores iguais que no caso o resultado será em tb_cat "a, b":

 

 

<option value="1"> a </option>

<option value="2"> b </option>

 

 

este e o resultado esperado.

 

EX: Tabela 2

 

----------------

ini_|_tb_cat

1___|_a

2___|_b

3___|_c

4___|_d

5___|_e

6___|_f

----------------

 

este e o exemplo o codigo que usei esta acima no topico.

 

 

/* Comentario

 

Busco pelo cadastro do usuario qual estados cadastrados estão disponivel nas categorias, tem muita categoria mais so quero exibir as disponivel para o estado buscado em vez de todas que estão vazia não mostra resultado invalido para o usuario e somente as que tem categorias em tabela 2.

 

*/

Compartilhar este post


Link para o post
Compartilhar em outros sites

Como eu obteria o resultado com [vode]SELECT DISTINCT campo FROM tabela[/code]

 

no meu codigo.

<?php

$cidade = $_POST['cidade'];

$sql = "SELECT cidade FROM anuncio WHERE cidade = '$cidade' GROUP BY cidade";
$qr = mysql_query($sql) or die(mysql_error());
$qr2 = mysql_num_rows($qr);

$cidade = $qr2['cidade'];

$sql = "SELECT * FROM tb_cat WHERE ini = '$cidade' ORDER BY nome ASC";
$qr = mysql_query($sql) or die(mysql_error());

if(mysql_num_rows($qr) == 0){
   echo  '<option value="0">'.htmlentities('Não há categorias').'</option>';

}else{
   while($ln = mysql_fetch_assoc($qr)){
      echo '<option value="'.$ln['subcat'].'">'.$ln['nome'].'</option>';
   }
}

?>

pois o reultado não esta sendo:

 

<option value="1"> a </option>

<option value="2"> b </option>

 

adaptando quando busca na sequencia informada acima nas 2 tabelas

Compartilhar este post


Link para o post
Compartilhar em outros sites

drhouse, o que o Alaerte quis dizer é para você utilizar a propriedade DISTINCT na sua consulta (select).

 

Essa propriedade elimina linhas repetidas, confira aqui: http://dev.mysql.com/doc/refman/5.0/en/distinct-optimization.html

 

No seu código:

$sql = "SELECT DISTINCT cidade FROM anuncio WHERE cidade = '$cidade' GROUP BY cidade";

Compartilhar este post


Link para o post
Compartilhar em outros sites

Sim entendi veja o que desenvolvi mais o resultado esta sendo 0 com o exemplo sequido de banco da dados acima

 

teria que aparecer 1 e 2 e na categoria gerar os campos de select

 

<option value="1"> a </option>

<option value="2"> b </option>

 

<?php

$cidade = $_POST['cidade'];

$sql = "SELECT DISTINCT categoria FROM anuncio WHERE cidade = '$cidade' GROUP BY cidade";
$qr = mysql_query($sql) or die(mysql_error());

if(mysql_num_rows($qr) == 0){

   echo  '<option value="0">'.htmlentities('Não há categorias').'</option>';

}else{

   while($ln = mysql_fetch_assoc($qr)){

      $categoria = $ln['categoria'];
   
      $sql2 = "SELECT * FROM tb_cat WHERE ini = '$categoria' ORDER BY nome ASC";
      $qr2 = mysql_query($sql2) or die(mysql_error());

      while($ln2 = mysql_fetch_assoc($qr2)){
      
      echo '<option value="'.$ln['subcat'].'">'.$ln['nome'].'</option>';
      
      }
      
}

?>

Compartilhar este post


Link para o post
Compartilhar em outros sites

Efetuei outra alteracao e me retorno apenas 1 resultado e seria 2

 

de tabela cidade 1 e 2 encontrado

 

em categoria deveria ser a e b em select

 

so esta retornando a.

 

<?

$cidade = $_POST['cidade'];

$sql = "SELECT DISTINCT categoria FROM anuncio WHERE cidade = '$cidade' GROUP BY cidade";
$qr = mysql_query($sql) or die(mysql_error());

if(mysql_num_rows($qr) == 0){

   echo  '<option value="0">'.htmlentities('Não há categorias').'</option>';

}else{

   while($ln = mysql_fetch_assoc($qr)){

      $categoria = $ln['categoria'];
   
      $sql2 = "SELECT * FROM tb_cat WHERE ini = '$categoria' ORDER BY cat ASC";
      $qr2 = mysql_query($sql2) or die(mysql_error());
      $ln2 = mysql_fetch_assoc($qr2);
      
      echo '<option value="'.$ln2['ini'].'">'.$ln2['cat'].'</option>';
      
      }
      
}

?>

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.