Calculo direto no Select
Olá a todos!
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!
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
Curtidas 0
Respostas
Marisiana Battistella
17/02/2014
Bom dia Marcelo!
Acho que não ficou bem claro pra mim, vc pretende armazenar a fórmula na tabela ou o resultado da fórmula?
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
Marcelo Pereira
17/02/2014
Bom dia Marcelo!
Acho que não ficou bem claro pra mim, vc pretende armazenar a fórmula na tabela ou o resultado da fórmula?
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
Marisiana Battistella
17/02/2014
Mas vc não tem como prever o tamanho da fórmula que ele vai informar? Porque pode ser q uma contenha 3 operadores, outra 5, assim por diante.
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?
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
Marcelo Pereira
17/02/2014
Mas vc não tem como prever o tamanho da fórmula que ele vai informar? Porque pode ser q uma contenha 3 operadores, outra 5, assim por diante.
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?
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
Marisiana Battistella
17/02/2014
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
Marcelo Pereira
17/02/2014
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
Fabiano Carvalho
17/02/2014
Coloque o valor do calculo em uma varivel e execute essa variavel.
nao sei fazer em mysql só em sql server.
Mas a ideia é essa.
nao sei fazer em mysql só em sql server.
Mas a ideia é essa.
GOSTEI 0
Alex Lekao
17/02/2014
Me interessei pelo Post... rsrsr
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
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
Marisiana Battistella
17/02/2014
Se ele precisa utilizar a fórmula para realizar o cálculo, acredito q só conseguirá fazendo da forma que o Fabiano sugeriu.
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...
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
Alex Lekao
17/02/2014
Acredito que sim.
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
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
Marisiana Battistella
17/02/2014
Pra dar certo ele teria q sempre armazenar a fórmula na ordem correta que deverá ser executada.
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)...
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
Alex Lekao
17/02/2014
Sim.
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
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
Marisiana Battistella
17/02/2014
Não sei se é a melhor forma de fazer....
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....
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
Marisiana Battistella
17/02/2014
Mas está certo em ser pessimista, porque a gente tem q imaginar todas as possibilidades....
Tentei contribuir, não sei se ajudei, confundi, ou só atrapalhei... =D
Tentei contribuir, não sei se ajudei, confundi, ou só atrapalhei... =D
GOSTEI 0
Alex Lekao
17/02/2014
sim...
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.
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
Marisiana Battistella
17/02/2014
Tem que ser né?! Porque se existir uma única possibilidade do usuário fazer errado, pode crer que ele vai fazer... rsrsrs
GOSTEI 0
Alex Lekao
17/02/2014
Nossa...
e como conseguem ne???
eu vivencio isso quase todos os dias... rsrsr
e como conseguem ne???
eu vivencio isso quase todos os dias... rsrsr
GOSTEI 0
Marisiana Battistella
17/02/2014
Aham, as vezes é inacreditável... =D
GOSTEI 0