jhoey 0 Denunciar post Postado Dezembro 18, 2009 Ae galera! Tudo certinho? Estou fazendo 3 consultas em um banco e elas retornam os mesmo dados, pois cada tabela tem um critério de busca, mas pode retornar valores iguais. Vou mostrar o meu banco Tabela categoria: Armazena as categorias Tabela categoria_contato: armazena o id do contato e a categoria do contato, pois cada contato pode ter mais de uma categoria. Tabela fonetica: armazena um campo com as foneticas e outro campo com o id do contato. Tabela contato: todas as informações do contato. O usuario digita em um campo em um formulario, a palavra que ele digita por exemplo ACADEMIA: 1ª Consulta: Ele busca ACADEMIA na tabela categoria se existe, ele retorna o id do contato que já traz os dados pois estou usando os joins da vida 2ª Consulta: Ele busca ACADEMIA na tabela fonetica se existe, ele retorna o id do contato que já traz os dados pois estou usando os joins da vida 3ª Consulta: Ele busca ACADEMIA na tabela contato se existe, retorna tudo. A dúvida é, usando o exemplo acima, eu tenho uma categoria academia e vai retornar todos os contato da academia! O mesmo na 2ª consulta e na 3ª! Na hora de exibir esta exibindo tudo, ou seja, vem duplicados, pois na 1ª consulta ele retorna os contatos que tem como categoria ACADEMIA, mas geralmente ACADEMIA tem nos nomes das academias. Minha atribuição dos resultados nas variaveis esta assim: while($dados = mysql_fetch_array($conCategoria)){ $id[] = $dados["id_contato"]; $nome[] = $dados["ds_nome"]; $cidade[] = $dados["ds_cidade"]; $ddd[] = $dados["ds_ddd"]; $tel = mysql_fetch_array($sql->Query("SELECT ds_telefone FROM telefone WHERE id_contato = $dados[id_contato]")); $telefone[] = $tel["ds_telefone"]; } while($dados = mysql_fetch_array($conFonetica)){ $id[] = $dados["id_contato"]; $nome[] = $dados["ds_nome"]; $cidade[] = $dados["ds_cidade"]; $ddd[] = $dados["ds_ddd"]; $tel = mysql_fetch_array($sql->Query("SELECT ds_telefone FROM telefone WHERE id_contato = $dados[id_contato]")); $telefone[] = $tel["ds_telefone"]; } while($dados = mysql_fetch_array($conNome)){ $id[] = $dados["id_contato"]; $nome[] = $dados["ds_nome"]; $cidade[] = $dados["ds_cidade"]; $ddd[] = $dados["ds_ddd"]; $tel = mysql_fetch_array($sql->Query("SELECT ds_telefone FROM telefone WHERE id_contato = $dados[id_contato]")); $telefone[] = $tel["ds_telefone"]; } Eu quero que ele filtre, e não mostre os duplicados! Bom é isso, caso não tenha me expressado direito pode falar! Obrigado Compartilhar este post Link para o post Compartilhar em outros sites
Matias Rezende 50 Denunciar post Postado Dezembro 18, 2009 Usa o array_unique pra isto. http://br.php.net/array_unique Carlos Eduardo Compartilhar este post Link para o post Compartilhar em outros sites
jhoey 0 Denunciar post Postado Dezembro 18, 2009 Intendi! Dae vou ter que fzer uma array_unique pra cada array ali? Tipo: $id = array_unique($id); $nome = array_unique($nome); ... Foi dessa maneira que pensou? Compartilhar este post Link para o post Compartilhar em outros sites
Matias Rezende 50 Denunciar post Postado Dezembro 18, 2009 Foi. Carlos Eduardo Compartilhar este post Link para o post Compartilhar em outros sites
jhoey 0 Denunciar post Postado Dezembro 18, 2009 Testei Aqui! Deu Certo em partes! Excluiu os duplicados, mas as cidades são iguais, e se eu deixar de usar o array_unique nelas, os indices delas vão ser diferentes ao corresponde nome e talz! Alguma forma de resolver isso? Compartilhar este post Link para o post Compartilhar em outros sites
Matias Rezende 50 Denunciar post Postado Dezembro 18, 2009 O valor do array é duplicado e não o índice? É isto? Carlos Eduardo Compartilhar este post Link para o post Compartilhar em outros sites
jhoey 0 Denunciar post Postado Dezembro 18, 2009 A variavel nome fica assim: $nome[iNDICE][VALOR] A variavel cidade fica assim: $cidade[iNDICE][VALOR] Sendo que os indices são iguais para seus valores correspondentes! Se eu tenho: $nome[1][Joao] -> $cidade[1][Piracicaba] Certo? $nome[2][Josefa] -> $cidade[2][Piracicaba] $nome[3][Joao] -> $cidade[3][Piracicaba] Agora se uso o unique em nome e cidade ficaria assim $nome[1][Joao] -> $cidade[1][Piracicaba] $nome[2][Josefa] -> ??? Ele sumiria pois São iguais!!! Ou seja o resultado sairia +/- assim: Joao - Piracicaba Josefa - Mas eu queria que todos ficassem com a cidade! Se eu não uso o array_unique em cidade e usando no nome: $nome[1][Joao] -> $cidade[1][Piracicaba] $nome[2][Joao] -> $cidade[2][Americana] $nome[3][Josefa] -> $cidade[3][Piracicaba] Vai sumir o 2 joao, num é? E Josefa iria ficar com 2 de indice? Dae ficaria assim? $nome[1][Joao] -> $cidade[1][Piracicaba] $nome[2][Josefa] -> $cidade[2][Americana] Ficaria com a cidade diferente!! É isso mesmo ou estou comendo bronha? Vlw Compartilhar este post Link para o post Compartilhar em outros sites
jhoey 0 Denunciar post Postado Dezembro 19, 2009 Resolvi em questão isso, em como armazenar e talz! Fiz assim: $teste[] = array("id" =>$dados[id_contato], "nome" => $dados["ds_nome"], "cidade" => $dados["ds_cidade"], "ddd" => $dados["ds_ddd"], "telefone" => $tel["ds_telefone"]); Agora queria saber como faço pra excluir de um array multidimensional mas por um campo especifico O meu array esta assim: ID | NOME | CIDADE | TELEFONE Gostaria que ele comparece tudo que esta na parte NOME e removesse o registro que já contivesse, exemplo abaixo: 1 - 001 | Jonas | Piracicaba | 34110000 2 - 002 | José | Piracicaba | 34114589 3 - 003 | Jonas | Piracicaba | 34110000 Dae a linha 3 no caso seria excluida pois já existe no array!! Alguem pode me ajudar? Abrass Compartilhar este post Link para o post Compartilhar em outros sites
Matias Rezende 50 Denunciar post Postado Dezembro 19, 2009 array_unique. Carlos Eduardo Compartilhar este post Link para o post Compartilhar em outros sites
jhoey 0 Denunciar post Postado Dezembro 19, 2009 Já utilizei o array_unique mas não funciona não! Compartilhar este post Link para o post Compartilhar em outros sites
Holt 1 Denunciar post Postado Dezembro 19, 2009 pelo oque entendi... if($consultaum == $consultadois){ $consultadois = ''; }else if($consultaum == $consultatres){ $consultatres = ''; }else if($consultadois == $consultatres{ $consultatres = ''; } Depois se tu for exibir os resultados é só verificar se a variavel tá vazia se tá não exibe Compartilhar este post Link para o post Compartilhar em outros sites
Matias Rezende 50 Denunciar post Postado Dezembro 19, 2009 @Holt Nada a ver. @jhoey Tentou fazer com array_unique depois de modificar o array? Como tentou fazer? Dá um print_r() no array antes e depois do array_unique, poste aqui os dois e como você quer que fique o array depois de retirar os duplicados. Carlos Eduardo Compartilhar este post Link para o post Compartilhar em outros sites
jhoey 0 Denunciar post Postado Dezembro 19, 2009 Dei uma organizada! Antes do array_unique Array ( [0] => Array ( [id] => 329832 [nome] => ACADEMIA ASES DA LIBERDADE [cidade] => Piracicaba [ddd] => 19 [telefone] => 34223625 ) [1] => Array ( [id] => 329836 [nome] => ACADEMIA ELITE SPORTS [cidade] => Piracicaba [ddd] => 19 [telefone] => 34263620 ) [2] => Array ( [id] => 329832 [nome] => ACADEMIA ASES DA LIBERDADE [cidade] => Piracicaba [ddd] => 19 [telefone] => 34223625 ) [3] => Array ( [id] => 329836 [nome] => ACADEMIA ELITE SPORTS [cidade] => Piracicaba [ddd] => 19 [telefone] => 34263620 ) [4] => Array ( [id] => 310082 [nome] => ACADEMIA 2001 [cidade] => Piracicaba [ddd] => 19 [telefone] => 34213806 ) [5] => Array ( [id] => 310083 [nome] => ACADEMIA AQUÁTICA [cidade] => Piracicaba [ddd] => 19 [telefone] => 34325885 ) .... Depois do array_unique Array ( [0] => Array ( [id] => 329832 [nome] => ACADEMIA ASES DA LIBERDADE [cidade] => Piracicaba [ddd] => 19 [telefone] => 34223625 ) [1] => Array ( [id] => 329836 [nome] => ACADEMIA ELITE SPORTS [cidade] => Piracicaba [ddd] => 19 [telefone] => 34263620 ) [2] => Array ( [id] => 329832 [nome] => ACADEMIA ASES DA LIBERDADE [cidade] => Piracicaba [ddd] => 19 [telefone] => 34223625 ) [3] => Array ( [id] => 329836 [nome] => ACADEMIA ELITE SPORTS [cidade] => Piracicaba [ddd] => 19 [telefone] => 34263620 ) [4] => Array ( [id] => 310082 [nome] => ACADEMIA 2001 [cidade] => Piracicaba [ddd] => 19 [telefone] => 34213806 ) [5] => Array ( [id] => 310083 [nome] => ACADEMIA AQUÁTICA [cidade] => Piracicaba [ddd] => 19 [telefone] => 34325885 ) ... Na busca esta assim: while($dados = mysql_fetch_array($conCategoria)){ $tel = mysql_fetch_array($sql->Query("SELECT ds_telefone FROM telefone WHERE id_contato = $dados[id_contato]")); $teste[] = array("id" =>$dados[id_contato], "nome" => $dados["ds_nome"], "cidade" => $dados["ds_cidade"], "ddd" => $dados["ds_ddd"], "telefone" => $tel["ds_telefone"]); } while($dados = mysql_fetch_array($conFonetica)){ $tel = mysql_fetch_array($sql->Query("SELECT ds_telefone FROM telefone WHERE id_contato = $dados[id_contato]")); $teste[] = array("id" =>$dados[id_contato], "nome" => $dados["ds_nome"], "cidade" => $dados["ds_cidade"], "ddd" => $dados["ds_ddd"], "telefone" => $tel["ds_telefone"]); } while($dados = mysql_fetch_array($conNome)){ $tel = mysql_fetch_array($sql->Query("SELECT ds_telefone FROM telefone WHERE id_contato = $dados[id_contato]")); $teste[] = array("id" =>$dados[id_contato], "nome" => $dados["ds_nome"], "cidade" => $dados["ds_cidade"], "ddd" => $dados["ds_ddd"], "telefone" => $tel["ds_telefone"]); } Fiz assim pra usar o array_unique: print_r($teste); $teste[] = array_unique($teste); print_r($teste); No array o 0 e o 1 é na busca da variavel conCategoria, e o 2 e 3 é da busca da variavel conNome Pois são pesquisas de critérios diferentes mas que no final aponta para uma mesma tabela, na verdade queria que sumisse o 0 e 1 ou 2 e 3! Desde que não repeta pra mim está ótimo! Obrigado Jonas Compartilhar este post Link para o post Compartilhar em outros sites
Matias Rezende 50 Denunciar post Postado Dezembro 19, 2009 Só para eu entender, o id é único? Ou seja, ele não pode repetir? Se for, faça assim em todas as consultas: $teste[$dados['id_contato']] = Eu não entendi porque você está fazendo 3 consultas. Assim vai resolver o problema sem precisar usar o array_unique. Carlos Eduardo Compartilhar este post Link para o post Compartilhar em outros sites
jhoey 0 Denunciar post Postado Dezembro 19, 2009 Carlos, deu Certo!! Yupi! Mas ele esta adicionando o primeiro na ultima posição! Olha os finais deles antes e depois do array_unique pelo print_r Antes [161518] => Array ( [id] => 161518 [nome] => TRAINING ACADEMIA SC LTDA BETTY [cidade] => Piracicaba [ddd] => 19 [telefone] => 34021371 ) [150263] => Array ( [id] => 150263 [nome] => YOGA SARASVATI ACADEMIA [cidade] => Piracicaba [ddd] => 19 [telefone] => 34337723 ) ) Depois [150263] => Array ( [id] => 150263 [nome] => YOGA SARASVATI ACADEMIA [cidade] => Piracicaba [ddd] => 19 [telefone] => 34337723 ) [329837] => Array ( [329832] => Array ( [id] => 329832 [nome] => ACADEMIA ASES DA LIBERDADE [cidade] => Piracicaba [ddd] => 19 [telefone] => 34223625 ) E na hora que eu uso o foreach para mostrar na tela fica em branco, mostra o texto html, mas não mostra os dados {foreach from=$teste item=c} <div id="divResNome">{$c.nome}</div> <div id="divResTelefone">({$c.ddd}){$c.telefone}</div> <div id="divResCidade">{$c.cidade} <br /><a href="{$c.id}">Mais Detalhes</a></td> </div> {/foreach} Estou usando o smarty =D!! Compartilhar este post Link para o post Compartilhar em outros sites
Matias Rezende 50 Denunciar post Postado Dezembro 19, 2009 Agora não precisa mais do array_unique, porque caso o id já exista no array ele vai sobrescrever e não vai duplicar. Carlos Eduardo Compartilhar este post Link para o post Compartilhar em outros sites
jhoey 0 Denunciar post Postado Dezembro 19, 2009 Hummm tendi agora!! Carlos agradesço muito você!! RESOLVIDO!! Compartilhar este post Link para o post Compartilhar em outros sites