Fórum Calculo direto no Select #470234
17/02/2014
0
Estou com uma dúvida no MySQL e na pesquisa não encontrei nenhuma luz para essa dúvida.
Ocorre que preciso realizar um calculo de fórmulas definidas pelo usuario do sistema.
Criei 4 colunas que se destinam aos operadores + - * / e outras 4 colunas que se destinam ao valor para compor essa formula:
OPERADOR_1 = pode ser + - * ou /
OPERADOR_2 = pode ser + - * ou /
OPERADOR_3 = pode ser + - * ou /
OPERADOR_4 = pode ser + - * ou /
e 4 campos para valores
VALOR_1
VALOR_2
VALOR_3
VALOR_4
Essa tabela destina-se a inserir formulas pelo usuário, por exemplo:
100 * 12 / 10 + 100 - 20
Espero ter sido calor em minha solicitação. Abraços a todos!
Marcelo Pereira
Curtir tópico
+ 0Posts
17/02/2014
Marisiana Battistella
Acho que não ficou bem claro pra mim, vc pretende armazenar a fórmula na tabela ou o resultado da fórmula?
Gostei + 0
17/02/2014
Marcelo Pereira
Acho que não ficou bem claro pra mim, vc pretende armazenar a fórmula na tabela ou o resultado da fórmula?
Bom dia! preciso na verdade que o usuário abasteça essa tabela com as equações pertinetes a certos indicadores. Por exemplo:
Valor Apple = 300 / 3 * 120
O fato é que preciso que esse resultado seja gerado via SELECT no MySQL, só que os operadores da equação podem ser variados, de acordo com a necessidade do cliente.
Por isso imaginei criar uma coluna para cada valor e operador.
Gostei + 0
17/02/2014
Marisiana Battistella
Então, acredito que vai ficar difícil criar uma coluna pra cada valor.
Não seria melhor armazenar a fórmula como uma string em uma única coluna?
Gostei + 0
17/02/2014
Marcelo Pereira
Então, acredito que vai ficar difícil criar uma coluna pra cada valor.
Não seria melhor armazenar a fórmula como uma string em uma única coluna?
Nesse caso felizmente existe uma limitação sim, e esta em 4 valores para até 3 operadores. O MySQL não reconhece um SELECT para os valores e os operadores empregados.
Ex: SELECT valor_1 operador_1 valor_2 FROM My_tabela - nesse caso ele deve reconhecer o operador inserido na coluna.
normalmente o MySQL aceita somente assim: SELECT valor_1 * valor_2 FROM My_tabela
Alguma luz?
Gostei + 0
17/02/2014
Marisiana Battistella
Ex: SELECT valor_1 operador_1 valor_2 FROM My_tabela - nesse caso ele deve reconhecer o operador inserido na coluna.
Nesse caso que vc exemplificou, não está faltando concatenar os valores?
Vi neste link que no mysql se utilizar a função concat [url]http://paposql.blogspot.com.br/2011/11/concatenando-campos-no-mysql.html[/url]
Gostei + 0
17/02/2014
Marcelo Pereira
Ex: SELECT valor_1 operador_1 valor_2 FROM My_tabela - nesse caso ele deve reconhecer o operador inserido na coluna.
Nesse caso que vc exemplificou, não está faltando concatenar os valores?
Vi neste link que no mysql se utilizar a função concat [url]http://paposql.blogspot.com.br/2011/11/concatenando-campos-no-mysql.html[/url]
Essa formula só precisa retornar o resultado. Ex: 300 / 3 * 10 = 1000. minha dificuldade é que o MySQL retorne apenas esse total levando em consideração os operadores inseridos nas colunas.
Gostei + 0
18/02/2014
Fabiano Carvalho
nao sei fazer em mysql só em sql server.
Mas a ideia é essa.
Gostei + 0
18/02/2014
Alex Lekao
Vc quer que o resultado seja uma formula nao um calculo, certo?
Nesse caso acredito que vc tera que usar a concatenacao conforme a Marisiana indicou.
A ultima informacao que eh o resultado do calculo na formula tambem eh uma coluna?
Se for a concatenacao ja resolvera, caso contrario teria que fazer como o Fabiano sugeriu, pegar os conteudos e armazenar em uma variavel e fazer o calculo para apresentar o resultado.
Mas de qqr forma acredito que havera um outro problema que sera a ordem dos operadores para se encontrar o resultado esperado, acredito que podera influenciar tbm no exito do que vc quer.
Bom, espero ter ajudado.
Abraco.
Alex - Lekao
Gostei + 0
18/02/2014
Marisiana Battistella
Vou compartilhar minha idéia...
Ele pode armazenar as informações na tabela da forma sugerida e para realizar o cálculo ele teria que pegar todos os registros de um determinado id e atribuir o valor de cada coluna para variáveis diferentes. A ordem dos valores e dos operadores na hora que ele for montar a fórmula deverá obedecer a ordem das colunas da tabela, conforme ele definiu: VALOR_1, OPERADOR_1, VALOR_2, OPERADOR_2, VALOR_3,....
Em seguida, cria uma estrutura de controle verificando as possibilidades de operadores armazenados:
OPERADOR_1 = pode ser + - * ou /
OPERADOR_2 = pode ser + - * ou /
OPERADOR_3 = pode ser + - * ou /
OPERADOR_4 = pode ser + - * ou /
Não sei se minha lógica está correta...
Gostei + 0
18/02/2014
Alex Lekao
Mas achei meio complicado o que esta querendo fazer.
Pq vc for colocar soma subtracao e divisao juntos as ordens das operacoes sao feitas na ordem correta pelo banco independente de que posicao sejam colocadas, alem que se quiser calcular alguma primeiro tera que colocar com parenteses.
Achei meio complicado isso viu.
Vou acompanhar o post para ver o que resolve. rsrsr
Gostei + 0
18/02/2014
Marisiana Battistella
Por exemplo: 100 * 12 / 10 + 100 - 20
Será resolvida como (((100 * 12) / 10) +100 ) - 20 = 200
Ele teria que ir lendo os valores na ordem das colunas e resolvendo utilizando um acumulador que no final conterá o resultado.
Não poderá inverter a ordem de resolução pois é uma fórmula pré-definida (pelo menos foi isso que entendi)...
Gostei + 0
18/02/2014
Alex Lekao
Se for pre-definida sim, tem que estar fixo.
Mas ele havia postado alguma coisa de que o usuario informaria alguma coisa, nao lembro exatamente o que.
Se isso por acaso mudar o padrao, ja era, vai dar errado. rsrs
Aqui ja fiz alguns relatorios com formulas pre definidas, coloquei informacao na chamada do relatorio que alguns campos sao obrigatorios e o pessoal consegue nao informar ou informar errado... rsrsr
entao... acho que uma hora vai dar problema. rsrsr
sou pessimista nesse caso... rsrsr
Gostei + 0
18/02/2014
Marisiana Battistella
Mas pensei nessa alternativa, porque não teria lógica ele armazenar cada membro que compõe a fórmula em colunas separadas se não for pra utilizar dessa forma.
Porque, se além de tudo isso, ele tiver que verificar a ordem que a fórmula deverá ser resolvida, ele teria que armazenar parenteses, etc...
Caso contrário ele poderia armazenar a fórmula toda em uma única coluna....
Gostei + 0
18/02/2014
Marisiana Battistella
Tentei contribuir, não sei se ajudei, confundi, ou só atrapalhei... =D
Gostei + 0
18/02/2014
Alex Lekao
acabaria voltando a uma das sugestoes do inicio. rsrsr
mas tudo vai depender da logica de programacao q ele vai usar e ai ja eh "misterio"... rsrsr
eu sou extremamente pessimista qdo se trata de usuario... rsrsr
mas vc com certeza ajudou.
Gostei + 0
Clique aqui para fazer login e interagir na Comunidade :)