liviasam 1 Report post Posted March 27, 2014 Pessoal, me ajudem aqui que já tentei de tudo e não consegui No meu MySQL tem um campo com casa decimal para digitar um valor `nota` decimal(4,2) NOT NULL, Se eu não gravar nada nele, beleza, o campo fica vazio, porém se por exemplo eu no cadastro digitar qualquer valor e depois vier a limpar esse valor, ele grava 0,00 Qual a forma de quando eu limpar o campo, deixar em branco, ele não gravar valor algum, não quero que ele fique gravando o 0,00. Já tentei `nota` decimal(4,2) DEFAULT NOT NULL, OU `nota` decimal(4,2) DEFAULT NULL, ou ainda `nota` decimal(4,2) DEFAULT, mas sem resultados. Share this post Link to post Share on other sites
Roberto Fagundes 40 Report post Posted March 27, 2014 tira o default coloca só decimal(4,2) e quando for alterar vc faz ele receber null Share this post Link to post Share on other sites
hinom 5 Report post Posted March 27, 2014 Conforme post #2, pode fazer direto no SQL: ALTER TABLE NomeDaTabela CHANGE nomeDoCampo nomeDoCampo DECIMAL(4,2) NULL; Isso ajustará a coluna da tabela para aceitar valor nulo. Share this post Link to post Share on other sites
liviasam 1 Report post Posted March 27, 2014 Vamos lá, O exemplo do Roberto não resultou em nada, continua gravando o 0.00 Já o seu hinom, só não assimilei como implementar na tabela. Ela está como abaixo no exemplo. CREATE TABLE IF NOT EXISTS `notas` ( `id` int(10) NOT NULL, `nota` decimal(4,2) NOT NULL, Share this post Link to post Share on other sites
DesenvolvedorRoger 50 Report post Posted March 27, 2014 ''(vazio) não é um valor correto para decimal, provavelmente gerará um erro... Uma solução, se não gosta do 0,00 seria você setar ele para null => preço = null, do contrário, é isso. Share this post Link to post Share on other sites
liviasam 1 Report post Posted March 27, 2014 Bom dia Roger, também não entendi como implementar isso aonde você fala para null => preço = null Ali é um campo de nota, então não seria eu gostar, pois eu posso atribuir uma nota 0.00 a quem a mereceu, porém a quem eu não atribuí nenhuma nota vai ser dado 0.00 também, ficando como essa pessoa tivesse recebido nota zero também. Então não tem critério. Se a pessoa não recebeu uma avaliação, o campo deveria receber o resultado null, No caso se eu não lançar nenhum valor, ele fica padrão null, porém se eu lançar por acidente e depois apagar, ele grava o 0.00, fazendo se entender que foi atribuído uma nota 0.00 como valor. No caso tenho de avaliar esse campo como possíveis lançamentos por acidente ou mesmo caso eu queira retirar uma nota e deixar o campo como vazio. se deixar 0.00 fica como se eu tivesse dado nota zero Share this post Link to post Share on other sites
DesenvolvedorRoger 50 Report post Posted March 27, 2014 É como falei, o banco ajusta para 0.00 pois '' não é um valor válido para o campo...Sempre que você precisar manipular esse campo e deixá-lo "vazio", set ele para null, como falei... Ex.: UPDATE tabela SET preco = NULL... *É importante que na criação do campo você tenha configurado para que ele aceite valores nulo Share this post Link to post Share on other sites
Roberto Fagundes 40 Report post Posted March 27, 2014 É como falei, o banco ajusta para 0.00 pois '' não é um valor válido para o campo... Sempre que você precisar manipular esse campo e deixá-lo "vazio", set ele para null, como falei... Ex.: UPDATE tabela SET preco = NULL... *É importante que na criação do campo você tenha configurado para que ele aceite valores nulo Exatamente o que eu falei... Share this post Link to post Share on other sites
liviasam 1 Report post Posted March 27, 2014 bom meninos, vou tentar por aqui a dica de vocês. Pegando carona, sabem como eu consigo somar 4 notas, dividir por 4 e gerar o resultado pelo mysql? Estou projetando um sistema de notas, e quando gero um boletim eu já consegui fazer essa matemática, porém para quem lança visualizar é complicado, pois ele apenas tem os campos do input, então não consegue ver o resultado final, tendo que fazer as contas por fora. Share this post Link to post Share on other sites
hinom 5 Report post Posted March 28, 2014 "Pegando carona" o quê? Evite estender o tópico com multiplos assuntos pois isso aqui não é suporte técnico, valeu? nada pessoal.. Se ainda não entendeu, isso é caracterizado como "tópico camaleão": origem do termo (inglês) http://meta.stackoverflow.com/questions/43478/exit-strategies-for-chameleon-questions discussão em português: http://meta.pt.stackoverflow.com/questions/1115/sera-que-esta-e-uma-pergunta-camaleao Share this post Link to post Share on other sites
Motta 645 Report post Posted March 28, 2014 bom meninos, vou tentar por aqui a dica de vocês. Pegando carona, sabem como eu consigo somar 4 notas, dividir por 4 e gerar o resultado pelo mysql? Estou projetando um sistema de notas, e quando gero um boletim eu já consegui fazer essa matemática, porém para quem lança visualizar é complicado, pois ele apenas tem os campos do input, então não consegue ver o resultado final, tendo que fazer as contas por fora. Algo assim ... Select aluno,avg(nota) media From notas Group by aluno Share this post Link to post Share on other sites
liviasam 1 Report post Posted March 28, 2014 Desculpe hinom, não foi minha intenção. Oi Motta, obrigada, tentei algo assim, até deu certo, mas ele só está listando agora o primeiro cliente. Vou verificar o erro que pode ser. Não vou estender aqui para não haver problemas Share this post Link to post Share on other sites
Motta 645 Report post Posted March 28, 2014 só está listando agora o primeiro cliente Deve haver alguma coisa no WHERE Share this post Link to post Share on other sites
liviasam 1 Report post Posted March 28, 2014 Então mota, eu usei essa lógica <?php $sql = "SELECT * FROM notas WHERE id_aluno=$coluna[id_aluno] AND id_periodo=$col_periodo[id_periodo] AND id_serie=$_SESSION[id_serie] AND id_materia=$_SESSION[id_materia]"; $media = mysql_query($sql); while($linha=mysql_fetch_array($media)) { $media = ($linha["n1"] + $linha["n2"] + $linha["n3"] + $linha["n4"])/4; echo $media; } ?> Usei essa lógica acima, mas nesse caso por exemplo ele só trás o primeiro aluno da lista. A média está sendo inserida certinha no campo destinado. Share this post Link to post Share on other sites
Motta 645 Report post Posted March 28, 2014 WHERE id_aluno=$coluna[id_aluno] faz com que só pegue o id passado em $coluna[id_aluno] Share this post Link to post Share on other sites
liviasam 1 Report post Posted March 28, 2014 Tá, só tinha esquecido de postar o que traz o valor do banco. <?=@mysql_result(mysql_query("SELECT n1 FROM notas WHERE id_aluno=$coluna[id_aluno] AND id_periodo=$col_periodo[id_periodo] AND id_serie=$_SESSION[id_serie] AND id_materia=$_SESSION[id_materia]"),0,n1)?> No caso o da média não traz valor de banco, por isso não sei o que pode ser Tentei passar só o ID do aluno, mas só volta o resultado de um Tentei de tudo mas ele só retorna o resultado de um aluno, se eu retirar a operação para resultado da média volta ao normal e lista todos Share this post Link to post Share on other sites
Motta 645 Report post Posted March 28, 2014 Tire só a condição de um id. Share this post Link to post Share on other sites
marxrtf 2 Report post Posted March 28, 2014 Tira tudo $sql = "SELECT * FROM notas "; Share this post Link to post Share on other sites
liviasam 1 Report post Posted March 28, 2014 Já tentei também e nada Share this post Link to post Share on other sites
Motta 645 Report post Posted March 28, 2014 <?=@mysql_result(mysql_query("SELECT n1 FROM notas WHERE id_periodo=$col_periodo[id_periodo] AND id_serie=$_SESSION[id_serie] AND id_materia=$_SESSION[id_materia]"),0,n1)?> Tente Mas esta sql nao trata a media Share this post Link to post Share on other sites