Ir para conteúdo

POWERED BY:

Arquivado

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

mmb

Query para deletar dados iguais

Recommended Posts

Galera, devido a uma m*** de Trigger minha tabela multiplicou os dados, eu gostaria de saber como fazer uma query que comparasse os 2 dados e desse o de maior valor. Deletando os restantes o problema é que ele é formada da seguinte forma

 

player_id = repete 7 vezes o msm numero

skillid = 7 vezes com numeros diferente(de 0 a 6)

value = repete 7 vezes(essa que eu queria que comparace)

count = repete 7 vezes

 

Como poderia fazer essa query? Teria que por limit 1, e acho que teria que ser com auxilio do php...

 

 

Abraço,

mmb

Compartilhar este post


Link para o post
Compartilhar em outros sites

Você teria que fazer uma query para preencher uma tabela temporária ou normal... Onde essa query obteria os registros que você quer manter.

 

Então limpar a tabela que você usa normalmente e repassar os dados que serão usados para ela.

 

Um exemplo de como você obteria os que deseja manter:

 

mysql> select * from teste;
+-----------+---------+-------+-------+
| player_id | skillid | value | count |
+-----------+---------+-------+-------+
|		 1 |	   1 |	 1 |	 1 | 
|		 1 |	   3 |	 4 |	 1 | 
|		 1 |	   2 |	 6 |	 1 | 
|		 1 |	   8 |	 3 |	 1 | 
|		 2 |	   1 |	 1 |	 1 | 
|		 2 |	   1 |	10 |	 1 | 
|		 2 |	   1 | 10000 |	 1 | 
|		 2 |   10000 |	10 |	 1 | 
+-----------+---------+-------+-------+
8 rows in set (0.00 sec)

mysql> select * from (select * from teste order by value desc ) tabela group by player_id;
+-----------+---------+-------+-------+
| player_id | skillid | value | count |
+-----------+---------+-------+-------+
|		 1 |	   2 |	 6 |	 1 | 
|		 2 |	   1 | 10000 |	 1 | 
+-----------+---------+-------+-------+
2 rows in set (0.00 sec)

Compartilhar este post


Link para o post
Compartilhar em outros sites

Bom acho que nao ficou bem claro

player_id = repete 7 vezes(é normal isso)

skillid = valores de 0 a 6(nao deve repedir esses valores com o mesmo player_id ex: pode ter player_id 1 skillid 1 value 2, nao pode ter player_id 1 skillid 1 value 3)

value = (repete 7 vezes de acordo com o skillid)

count = (repte 7 vezes de acordo com o skillid)

 

Meu problema é que repetiu 2x o skillid ou seja tenho 14 registros para 1 player_id quando deveria ter apenas 7, gostaria de comparar esses skillid ver ql é o maior e pegas os novos...

Compartilhar este post


Link para o post
Compartilhar em outros sites

Ou seja a tabela se multiplicou 2 vezes dentro dela mesma, certo?

 

delete tabela

from tabela ,

(

Select palyer_id as p, skillid as s , min(value) as v, count as c from tabela group by player_id , skillid , count

) as abc

where

tabela.player_id = abc.p AND

tabela.skillid = abc.s AND

tabela.value=abc.v AND

tabela.count = abc.c

 

 

Isso vai deletar todas as entradas duplicadas na tabela cujo o "value" seja mais baixo , antes de usar tenha certeza q todas as linhas foram duplicadas

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.