KUROL3 3 Denunciar post Postado Dezembro 12, 2009 Olá estou com um problema.. e gostaria de uma solução inteligente... tenho uma tabela de bairros id ----- nome 597----Jardim Irajá 598----Jardim Irajá 823----Jardim Irajá 961----Jardim Irajá tabela de imóveis id ----- id_bairro 25 ----- 597 26 ----- 598 27 ----- 598 28 ----- 823 29 ----- 823 30 ----- 823 31 ----- 823 32 ----- 961 33 ----- 961 34 ----- 961 Tem como fazer um comando que verifique os bairros que tem imoveis com duplicidade na tabela de bairros e jogue tudo para um único id de bairro na tabela de imoveis de preferencia para um bairro que tiver maior número de imoveis) e depois apague os bairros na tabela de bairros que contiver mais de um registro duplicado. srrssr boa essa em.. srrsrs Marco Compartilhar este post Link para o post Compartilhar em outros sites
giesta 29 Denunciar post Postado Dezembro 13, 2009 update imoveis i, (select max(id) id_unico , group_concat(id) array_id from bairros group by nome) b set i.id_bairro = b.id_unico where i.id_bairro in b.array_id Compartilhar este post Link para o post Compartilhar em outros sites
KUROL3 3 Denunciar post Postado Dezembro 13, 2009 update imoveis i, (select max(id) id_unico , group_concat(id) array_id from bairros group by nome) b set i.id_bairro = b.id_unico where i.id_bairro in b.array_id veja o erro UPDATE imoveis i, ( SELECT max( id ) id_unico, group_concat( id ) array_id FROM bairros GROUP BY nome )b SET i.id_bairro = b.id_unico WHERE i.id_bairro IN b.array_id Mensagens do MySQL : [Documentação] #1064 - You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'b.array_id' at line 1 tentei assim tb UPDATE imoveis i, ( SELECT max( id ) AS id_unico, group_concat( id ) AS array_id FROM bairros GROUP BY nome )b SET i.id_bairro = b.id_unico WHERE i.id_bairro IN b.array_id Mensagens do MySQL : [Documentação] #1064 - You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'b.array_id' at line 7 Compartilhar este post Link para o post Compartilhar em outros sites
giesta 29 Denunciar post Postado Dezembro 13, 2009 update imoveis i, (select max(id) id_unico , group_concat(id) array_id from bairros group by nome) b set i.id_bairro = b.id_unico where i.id_bairro in (b.array_id) Compartilhar este post Link para o post Compartilhar em outros sites
KUROL3 3 Denunciar post Postado Dezembro 13, 2009 Nossa que estranho por algum motivo não ficou do jeito que queria.... continua tendo mais de um bairro com imóveis... ZZZZZ será que no b.array_id consta todos os ids do grupo by nome? tem algum comando que exibe somente o array_id (os valores) "para tirar a prova" tipo issu: select max(id) id_unico , group_concat(id) array_id from bairros group by nome so que ao invés de motrar [bLOB - 3 Bytes] ou [bLOB - 5 Bytes] mostrar os ids? Marco Compartilhar este post Link para o post Compartilhar em outros sites
giesta 29 Denunciar post Postado Dezembro 13, 2009 Só tem no caso do nome dos bairros ser diferente , exemplo : Irajá, Irajah, Iraja Compartilhar este post Link para o post Compartilhar em outros sites
KUROL3 3 Denunciar post Postado Dezembro 14, 2009 Geista verifique e os nomes estavam exatamente = estranho nao ter funcionado..... mas valeu como lição... pois vou usar em outros casos.... acabei fazendo assim criando o campo bairro_antigo na tabela de imoveis: update imoveis inner join bairros on bairros.id = imoveis.id_bairro set bairro_antigo = bairros.nome where imoveis.id_bairro = bairros.id UPDATE imoveis inner join bairros on (bairros.nome = imoveis.bairro_antigo and bairros.cidade = imoveis.cidade) set imoveis.id_bairro = (select id from bairros where bairros.nome = imoveis.bairro_antigo and imoveis.cidade=bairros.cidade limit 1) where bairros.nome = imoveis.bairro_antigo and bairros.cidade = imoveis.cidade Abraço Marco Compartilhar este post Link para o post Compartilhar em outros sites