Ir para conteúdo

POWERED BY:

Arquivado

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

Maykel-ctba

Rotina para corrigir entrada de dados anteriores

Recommended Posts

Fala galera! Tranquiles? Sempre apelo para o forum aqui, e sempre têm dado certo! HAHAH vamos para mais uma! :thumbsup:

 

Case: Site de imobiliária

Valor de exemplo: 437 (vocês já irão entender).

Problema: Na estrutura do banco, os dados para preços e medidas estão em FLOAT. Só que muita gente acaba mexendo no sistema, e cadastrando os dados. Então, meu cliente solicitou que fosse feito uma validação no formulário de entrada para unificar o formato. Foi criado uma máscara que pegam os dois últimos numeros e apresentam como decimais.

 

Até aí OK.

 

Porém, muitos dos dados antigos não foram cadastrados com ".00" no final, ou seja, quando vou editar um registro, a máscara está transformando o valor 437 em 4.37. A questão é que, também existem diversos registros que possuem numeros com decimais (4782.98 por exemplo, e este é exibido certo na página com a máscara)

 

Então, gostaria de saber se existe algum meio de fazer via MySQL:

 

- Pegar os registros da tabela sistema_imovel

- Nos campos imoAreaTotal, imoAreaMaxima, imoValor, imoValorLiquido que não tiverem decimais, inserir um .00 (concatenar no MySQL, isso é possível?)

 

Estrutura do banco:

CREATE TABLE IF NOT EXISTS `sistema_imovel` (
 `imoId` int(5) NOT NULL AUTO_INCREMENT,
 `imoReferencia` varchar(255) NOT NULL,
 `imoOperacao` int(1) NOT NULL,
 `imoTipo` int(1) NOT NULL,
 `estId` int(5) NOT NULL,
 `cidId` int(5) NOT NULL,
 `imoDestaqueHome` enum('S','N') NOT NULL,
 `imoTitulo` varchar(255) NOT NULL,
 `imoEndereco` varchar(255) NOT NULL,
 `imoDestaque` varchar(255) NOT NULL,
 `imoMapa` varchar(500) NOT NULL,
 `imoVideo` varchar(255) NOT NULL,
 `imoAreaTotal` float NOT NULL,
 `imoAreaMaxima` float NOT NULL,
 `imoFaixaDestaque` int(1) NOT NULL,
 `imoMobiliado` enum('S','N') NOT NULL,
 `imoCondominio` enum('S','N') NOT NULL,
 `imoCondominioClube` enum('S','N') NOT NULL,
 `imoCondominioValor` float NOT NULL,
 `imoIdade` int(3) NOT NULL,
 `imoValor` float NOT NULL,
 `imoValorLiquido` float NOT NULL,
 `imoIptu` varchar(100) NOT NULL,
 `imoSeguroIncendio` float NOT NULL,
 `imoDescricao` text NOT NULL,
 `imoDataCadastro` date NOT NULL,
 `imoDataAlteracao` date NOT NULL,
 `imoAtivo` enum('S','N') NOT NULL,
 `imoExcluido` enum('S','N') NOT NULL,
 PRIMARY KEY (`imoId`)
) ENGINE=MyISAM  DEFAULT CHARSET=utf8 AUTO_INCREMENT=262 ;

 

Ou, existe alguma outra solução viável, seja via PHP (server-side) ou qualquer outra coisa?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Cara,

 

Acho que seria mais fácil você definir os campo float que você tem para float(10,2). Acho que isso já deva resolver.

Exemplo: ALTER TABLE tabela MODIFY COLUMN coluna FLOAT(10,2) NOT NULL;

Compartilhar este post


Link para o post
Compartilhar em outros sites

@Brino eu tentei isso anteriormente numa pesquisa feita. O problema é, quando eu defino para (10,2), os dados somem. Não sei o que acontece.

 

@Fabiano caraca! Não sabia que existia uma função nativa para isso no MySQL. Vai ser muito util nos projetos futuros :thumbsup: infelizmente devido ao prazo curto com o cliente, acabei por fazer uma formatação via PHP nos resultados do select.

 

Desta maneira, quando a galera vai editar, acaba vendo o numero formatado, e editando já corretamente. Mas fica a dica para um futuro! Muito obrigado!

Compartilhar este post


Link para o post
Compartilhar em outros sites

Maykel-ctba,

 

Pontuando sobre a sugestão do brino, sugiro você fazer o seguinte, ao invés de usar Float, use decimal, para trocar, faz o seguinte.

 

Duplique sua tabela somente com a estrutura, altere os campos, depois, faça a inserção bom base na tabela original.

 

Feito isso, renomei as tabelas.

 

Abraços.

 

_ _

Fabiano Abreu

Papo Sql - Um blog com tutoriais, dicas e truques sobre SQL

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.