mmb 0 Denunciar post Postado Dezembro 28, 2007 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
Eclesiastes 2 Denunciar post Postado Dezembro 29, 2007 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
mmb 0 Denunciar post Postado Dezembro 29, 2007 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
giesta 29 Denunciar post Postado Dezembro 29, 2007 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