Ir para conteúdo
Fórum Script Brasil
  • 0

Distinct


Rudimar

Pergunta

Possuo uma tabela com dados. Ocorre que, sabe-se lá o que aconteceu, alguns registros foram duplicados. Então preciso excluir estes registros excedentes.

Então tentei fazer da seguinte forma.

Usando a cláusula distinct vou copiar os registros para uma segunda tabela, ou seja, vou copiar os registros originais para uma outra tabela que possui a mesma estrutura da primeira.

A tabela principal possui vários campos, sendo que para identificar quais os registros que estão duplicados, basta comparar os valores de 4 campos. Então a instrução sql ficou assim:

select distinct campo1, campo2, campo3, campo4 from tabela.

Muito bem estão selecionados os registros sem os duplicados. Então o próximo passo seria exportar estes registros para a outra tabela.

Mas veja só: são apenas quatro campos que foram considerados na clausula distinct. Portanto ao copiar os registros para a outra tabela serão copiados apenas os 4 campos especificados na clausula distinct. Como preciso copiar o registro inteiro com todos os campos ( não somente os quatro campos ), aí a coisa complicou. Percebeu?? Faltam os demais campos.

Aí alguém diria: Então é só especificar todos os campos na clausula distinct.

É o que me parece correto.

Mas aí ele pega todos os registros, inclusive os duplicados. Esta parte eu realmente não entendi. Entendo que deveria pegar apenas os duplicados...

Link para o comentário
Compartilhar em outros sites

7 respostass a esta questão

Posts Recomendados

  • 0

Se voce fizer um laço jogando os campos para variaveis e e ir gravando não da certo?

tipo:

while($resultado = mysql_fetch_array($query)) {

$id=$resultado['id'];

$Nome=$resultado['Nome'];

$End=$resultado['End'];

// e por ai vai incluindo todos

// ai coloca o insert into ....

}

Deve funcionar..

Link para o comentário
Compartilhar em outros sites

  • 0

Isto não deve dar certo... lembre-se ...nem todos os nomes dos campos foram especificados na instrucao sql

Se eu executar isto que voce sugeriu... com certeza vai dar pau em vários campos...porque não foram especificados na instrucao sql...

é justamente este o problema...

Link para o comentário
Compartilhar em outros sites

  • 0

Acho que não, porque o Select vai apenas filtrar o resultado, não vai ignorar o conteudo das tabelas.

tenta fazer isto com os campos, só que não adiciona coloca Echo "nome: $var<br>"; (mas use algo que não esta no select..

unica forma para ter certeza

Link para o comentário
Compartilhar em outros sites

  • 0

Faça por partes...primeiro faça a sua query com o distinct lá e guarde a id desses registros que foram retornados...depois faça outra pesquisa pra pegar os dados completos dessas ids...

Não é o ideal, mas quando a linguagem e/ou a DataBase vem de frescura pra cima da gente, tem que se virar com o que se tem... smile.gif

Link para o comentário
Compartilhar em outros sites

  • 0

Pois é cara, eu já imaginava que esta clausula não iria dar certo...

Como voce diz, a tal da frescura....sempre que tem uma função que aparenta muita ajuda na programação, aí chega num ponto que não dá certo...

Mas a sua sugestão, eu já tentei, eu não posso colocar o campo ID na clausula distinct, porque aí, não sei porque, ele seleciona todos os registros.

De qualquer forma, fico agradecido...

Link para o comentário
Compartilhar em outros sites

  • 0

Acreditando que jamais teremos CAMPO1, CAMPO2, CAMPO3 E CAMPO4 iguais a qualquer outra linha do banco posso fazer:

$query1 = mysql_query("select distinct campo1, campo2, campo3, campo4 from tabela");
while ($dado  = mysql_fetch_array($query1)){
$1 = $dado['campo1'];
$2 = $dado['campo2'];
$3 = $dado['campo3'];
$4 = $dado['campo4'];
$query2 = mysql_query("SELECT * FROM TABELA WHERE campo1 = '$1' AND campo2 = '$2' AND campo3 = '$3' AND campo4 = '$4' LIMIT 1");
$in = mysql_fetch_array($query);

$insert = mysql_query("INSERT INTO tabela2 VALUES()"):
}

Tenta isso aí e veja se te ajuda...

Você vai precisar completar com a última query INSERT... como não sei os nomes dos campos ou até mesmo o número...

Não sei se entendi direito, mas espero ter ajudado!

Link para o comentário
Compartilhar em outros sites

Participe da discussão

Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.

Visitante
Responder esta pergunta...

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emoticons são permitidos.

×   Seu link foi incorporado automaticamente.   Exibir como um link em vez disso

×   Seu conteúdo anterior foi restaurado.   Limpar Editor

×   Você não pode colar imagens diretamente. Carregar ou inserir imagens do URL.



  • Estatísticas dos Fóruns

    • Tópicos
      152,3k
    • Posts
      652,5k
×
×
  • Criar Novo...