erison 63 Denunciar post Postado Janeiro 21, 2013 estou com 3 tabelas entrada saida devolucao calculo entrada-(saida+devolucao) duvida é na minha tela de movimento devo apenas fazer o select ou sera melhor criar uma outra tabela ai quando houver alguma alteração nas outras 3 altar o valor nela ? pq assim, acho que com o passar do tempo a consulta vai demorar pq o select vai fazer esse calculo e tem ineer join e tudo mais. e fazendo trigger vou apenas fazer um simples select na tabela de movimento. ajuda? Compartilhar este post Link para o post Compartilhar em outros sites
Felipe Sá 3 Denunciar post Postado Janeiro 21, 2013 Olá! Poderia colocar a estrutura das tabelas e também como seria a tela de movimento? Se as 3 tabelas forem em formato de histórico e a tela de movimento também seja um tipo de histórico do item, creio que não haja necessidade de criar novas tabelas/campos. Se caso a tela em questão seja de itens vs. quantidades imagino que seja interessante colocar um campo de quantidade atual no item. Espero ter ajudado! :) Compartilhar este post Link para o post Compartilhar em outros sites
erison 63 Denunciar post Postado Fevereiro 8, 2013 assim por que como são 3 tabelas entrada, saída e devolução para mostra o estoque vou usar um select um pouquinho grande. com 3 sum e assim no começo beleza, mais com o passar do tempo for tipo, 1 milhão de registro em cada tabela. esse calculo vai demorar. sera que colocar esse select em uma visão, vai se tornar mais rápido? tambem pensei em colocar uma tabela para movimento ai quando for editando, inserindo ou deletando(nas 3 tabelas: entrada, saída e devolução) vai disparando . iria fazendo os cálculos ai quando fosse exibir iria ficar bem mais rápido por que iria apenas fazer um select simples. mas também poderia ocorre erros. vai por uma conhecidencia a trigger não dispara coisa assim pode da o resultado errado. mas se alguém tiver alguma outra dica avisa ai . :D Compartilhar este post Link para o post Compartilhar em outros sites
Vinicius Rangel 208 Denunciar post Postado Fevereiro 8, 2013 Crie uma view Compartilhar este post Link para o post Compartilhar em outros sites
erison 63 Denunciar post Postado Fevereiro 8, 2013 certo mais você acha q ela sera mais rapida? Compartilhar este post Link para o post Compartilhar em outros sites
Vinicius Rangel 208 Denunciar post Postado Fevereiro 8, 2013 com ela o PHP não vai perder tempo com os join's, você vai fazer um select comum como se a junção de suas tabelas fossem uma tabela, porém cada vez que atualizar as tabelas a view já puxa o dado novo. muito rápido cara. Compartilhar este post Link para o post Compartilhar em outros sites
erison 63 Denunciar post Postado Fevereiro 8, 2013 eu sei eu não estou fazendo nenhum calculo no php e tudo no banco. a demora que eu falo e o banco fazer esse calculo com muitos registros certo mais a visão ela quando eu chamar ela. ela vai fazer o calculo ne não? Compartilhar este post Link para o post Compartilhar em outros sites
Vinicius Rangel 208 Denunciar post Postado Fevereiro 8, 2013 sim, a view nada mais é que o mesmo select que você faria na tela A diferença é que isso você vai jogar em "outra tabela" no caso a view que não é outra tabela de fato e a consulta é select * from minhaView sem aqueles join, assim esse trabalho fica para o banco de dados deixando o php muito mais leves. para seus registros ficarem lento precisa ter muitoooooooos, muitos mesmo. Compartilhar este post Link para o post Compartilhar em outros sites
erison 63 Denunciar post Postado Fevereiro 8, 2013 certo mais ai tem outro problema. pq ai quando for da insert ou update ou delete vai demorar mais. pq alem de alterar nas tabelas tem que alterar na views ou seja refazer os calculos Compartilhar este post Link para o post Compartilhar em outros sites
Vinicius Rangel 208 Denunciar post Postado Fevereiro 8, 2013 A view fica faz tudo sozinha depois de pronta. Você faz UPDATE, INSERT E DELETE nas tabelas normalmente e é ai que entra a mágica da VIEW, ela já assimila todos esses dados sem a necessidade de você reprocessar. Compartilhar este post Link para o post Compartilhar em outros sites
erison 63 Denunciar post Postado Fevereiro 8, 2013 eu entedie. mais para meu caso não funcionar muito bem por que vamos usar mais as 3 tabelas do que a consulta da view. por que depois de ter muitos registros, vai demorar quando for meche nas tabelas pq ela só vai retornar quando alterar na view Compartilhar este post Link para o post Compartilhar em outros sites
Vinicius Rangel 208 Denunciar post Postado Fevereiro 8, 2013 Primeiro eu não entendi nada, segundo uma das funções que surgiu a view foi essa. por que se você cruzar 3 tabelas e mandar executar essa query no php certamente demora, já uma sql direto que é na view da certo. Banco de dados não fica lento cara, você terá 500 mil registos? procure oracle, SQL. join são um pouco lento mesmo você pode cruzar as tabelas de outros jeito. muita coisa influência. Obs: Eu trabalho com view e deixo 300, 400 mil dados e roda que é uma beleza, pode pesquisar que é o caminho certo. Compartilhar este post Link para o post Compartilhar em outros sites
erison 63 Denunciar post Postado Fevereiro 8, 2013 certo mais se eu for dar um insert em uma das tabelas não vai demorar inserir? Compartilhar este post Link para o post Compartilhar em outros sites
Vinicius Rangel 208 Denunciar post Postado Fevereiro 8, 2013 responda a você mesmo. Por que demoraria? Compartilhar este post Link para o post Compartilhar em outros sites
erison 63 Denunciar post Postado Fevereiro 8, 2013 por que quando inserir ou alterar em uma das tabelas(entrada,saida ou devolução), vai demorar por que a view vai fazer todo o calculo dinovo. vamos supor que seja um estoque que tenha muito entrada e saida de produtos. vai demorar muito por que a view vai ta sempre sendo chamada. e fazendo o calculo entende Compartilhar este post Link para o post Compartilhar em outros sites
Vinicius Rangel 208 Denunciar post Postado Fevereiro 8, 2013 A view é inteligente e rápida Compartilhar este post Link para o post Compartilhar em outros sites
erison 63 Denunciar post Postado Fevereiro 8, 2013 em seu estoque você usa view? Compartilhar este post Link para o post Compartilhar em outros sites
Vinicius Rangel 208 Denunciar post Postado Fevereiro 8, 2013 Meu sistema é para gerenciamento de estoque, planejamento. Eu tenho histórico de 5 anos de transação diária de uma empresa fazendo alguns cálculos, e tudo isso em cima de uma view. Empresa grande. Compartilhar este post Link para o post Compartilhar em outros sites
CleitonGarcia 31 Denunciar post Postado Fevereiro 8, 2013 Colega, Irei lhe dar uma dica que de certa forma irá aumentar a produtividade e a eficácia de seu sistema. Você poderia fazer isso com apenas duas tabelas, uma para gravar o histórico do item e outra o item em sí e seu status. Na hora de adicionar o produto, é criado um registro, dizendo qual produto, data e o que foi feito (add, excluiu ou editou), já para os clientes, na hora da compra, é também criado um registro informando que foi comprado, se foi devolvido, a mesma coisa. Dessa forma você consegue colocar em apenas um lugar qualquer tipo de log, além claro, de manter o status como quiser do produto, sendo ativo, inativo, fora de estoque, etc. Compartilhar este post Link para o post Compartilhar em outros sites
Jordan Pinheiro_147113 15 Denunciar post Postado Fevereiro 8, 2013 para fazer certo mesmo eu começaria do banco... fazendo da forma correta em uma tabela sómov CREATE TABLE IF NOT EXISTS `mov` ( `id` int(11) NOT NULL AUTO_INCREMENT, `produto_id` int(11) NOT NULL, `operador` varchar(1) NOT NULL, `quantidade` int(11) NOT NULL, `data_registro` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, PRIMARY KEY (`id`) ) ENGINE=InnoDB DEFAULT CHARSET=latin1 AUTO_INCREMENT=6 ; -- -- Extraindo dados da tabela `mov` -- INSERT INTO `mov` (`id`, `produto_id`, `operador`, `quantidade`, `data_registro`) VALUES (1, 12, '+', 100, '2013-02-08 19:13:40'), (2, 12, '+', 50, '2013-02-08 19:13:40'), (3, 12, '-', 3, '2013-02-08 19:14:02'), (4, 12, '-', 23, '2013-02-08 19:14:02'), (5, 12, '+', 20, '2013-02-08 19:38:03'); Depois de criada a tabela acima,,, vamos criar a VIEW que vai segurar os valores CREATE VIEW movimenta as SELECT (SELECT SUM(quantidade) FROM mov WHERE operador = '+' ) as positivo, (SELECT SUM(quantidade) FROM mov WHERE operador = '-') as negativo FROM mov LIMIT 1 Pronto bem simples.... agora só aplica o select abaixo SELECT (positivo - negativo) as totalEstoque FROM movimenta Lembrando que não usei condições mas para controlar por produto vc deve usar WHERE produto_id = "id do seu produto" Vale lembrar caso você não saiba como funciona uma VIEW no SQL.. ELA CRIA UM tabela com base em uma consulta... e toda vez que um novo registro for adicionado a tabela de origem o valor já é atualizado direto na VIEW ou seja.. muito mais simples, fácil, rápido! A view fica faz tudo sozinha depois de pronta. Você faz UPDATE, INSERT E DELETE nas tabelas normalmente e é ai que entra a mágica da VIEW, ela já assimila todos esses dados sem a necessidade de você reprocessar. cara vc ta certo... esse cara fica querendo fazer as coisas de forma amadora e falando de tamanho para uma coisa tão simples... eu tenho consultas de 18 ou 20 linhas que rodam tão rápido como qualquer outra... Vc ta certo a solução mais simples e profissional é uma VIEW e fazer tudo em uma tabela só! Compartilhar este post Link para o post Compartilhar em outros sites