Ir para conteúdo

POWERED BY:

Arquivado

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

jhoey

[Resolvido] Excluir resultado duplicado!

Recommended Posts

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

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

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

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

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

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

@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

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

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

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

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.