Suma de campos

1. Trabajo con php/mysql, donde he creado
una tabla con los campos:
Notas1, notas2, notas3, promedio
2. Donde promedio esta referido a las notas1, 2,3
3.Pero inicialmente solo hay valores para notas1, por lo tanto
el promedio se esta evaluando tal como:
prom=(notas1+notas2+notas3)/3
Y el resultado esta erróneo.
4. Lo que deseo es saber como php o mysql puede reconocer que en un momento dado no hay
valor en ese campo

1 respuesta

Respuesta
1
No entiendo bien tu pregunta. Cuando haces una consulta a una base de datos, te devuelve todos los valores que estén almacenados y correspondan con las condiciones de la consulta. Si obtienes un registro donde notas2 y notas3 están vacíos, tendrán un valor 0 y no fallarán al hacer el promedio.
Si lo que quieres el calcular el promedio sólo de los valores que tengan datos puedes usar el siguiente código:
if ($notas3 > 0) {
$prom = ($notas1 + $notas2 + $notas3) / 3;
} else {
if ($notas2 > 0) {
$prom = ($notas1 + $notas2) / 2;
} else {
$prom = $notas1;
}
}
Creo que es ese el cálculo que necesitas hacer. De esta forma tienes que ir rellenando notas en orden, es decir, no puedes rellenar notas3 antes que notas2.
Las variables $notas1, $notas2 y $notas3 son valores obtenidos de una consulta a la base de datos.
Si no es esto lo que pretendes hacer, pídeme una aclaración explicándome exactamente qué necesitas.
Te doy estos datos:
Nombre de tabla:pri1
campos de notas: logico_1b,logcio_2b,logico_3b,logico_4b
campo promedio:
logico_prom
lugo realizo lo siguiente :
include("conexion.php");
$link=Conectarse();
$pquery = "SELECT * FROM pri1";
$presult = mysql_query($pquery,$link) or die(mysql_error());
while($row=mysql_fetch_array($presult))
{
$logico_prom = ($row[0]+$row[1]+$row[2]+$row[3])/4;
$query = "INSERT INTO pri1(logico_prom) VALUES('$logico_prom')";
$result = mysql_query($query) or die(mysql_error());
}
?>
Es decir en cada leída de reigstros, debe calcular el promedio e introducir ese nuevo valor en el campo promedio correspondiente.
Lo anterior lo realiza pero crea un registro adicional con solo el valor promedio ya calculado.
Gracias
freddy
Al usar "INSERT INTO" estás creando un nuevo registro en el que solo rellenas el campo logico_prom. Para modificar el registro en cuestión tienes que realizar una consulta parecida a la siguiente:
$query = "UPDATE pri1 SET logico_prom = '{$logico_prom}' WHERE logico_1b = '{$row[0]}' AND logico_2b = '{$row[1]}' AND logico_3b = '{$row[2]}' AND logico_4b = '{$row[3]}'";
Si te fijas en esta consulta tienes la parte SET que indica el campo que vas a modificar, y la parte WHERE que indica la condición para buscar el registro que vas a modificar. Yo he usado los campos logico_1b hasta logico_4b, pero supongo que ninguno de esos campos será clave, es decir, único. Tendrías que poner en la tabla pri1 un campo clave que asegure que no puedas tener dos registros con el mismo valor en ese campo. De lo contrario podrías actualizar más registros de los deseados. Te pongo un ejemplo:
- Tienes dos registros con los siguientes valores:
logico_1b = 4
logico_2b = 4
logico_3b = 4
logico_4b = 4
Cuando haces la consulta UPDATE se actualizará el campo logico_prom en los dos registros, pero quizá sólo quieras en uno de ellos, el que estés tratando en ese momento. Sin embargo, si tienes un campo clave llamado id_logico, cada registro tendría distinto valor para el campo id_logico y la consulta UPDATE querdaría de la siguiente forma:
$query = "UPDATE pri1 SET logico_prom = '{$logico_prom}' WHERE id_logico = '{$row[0]}'";
Supongo que $row[0] es el valor correspondiente a id_logico, $row[1] el correspondiente a logico_1b, etc. A mi me parece más correcta esta forma de realizarlo ya que modificas sólo el registro que estás tratando y no otros que tengan el mismo valor en los campos lógico.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas