Usamos cookies para medir audiência e melhorar sua experiência. Você pode aceitar ou recusar a qualquer momento. Veja sobre o iMasters.
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>';
}
}
?>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.
*/
Se for apenas pra não repetir resultados, utilize:
SELECT DISTINCT campo FROM tabela
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
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";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>';
}
}
?>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>';
}
}
?>
Poste o exemplo do resultado q você deseja.