Comunidad de diseño web y desarrollo en internet online

mysql: Crear una columna cuyos valores que dependen de otras

Citar            
MensajeEscrito el 25 Abr 2010 10:58 pm
Hola tengo una duda a la hora de crear tablas.

Tengo una tabla con 2 columnas, 'a' y 'b', cada columna tiene valores numéricos.

Quiero crear una 3a columna, 'c', que debe contener el resultado de una operación aritmética sencilla (una resta):
a - b = c
donde 'a' y 'b' son valores que mete el usuario, y 'c' tendría que calcularse automáticamente.

¿Puedo hacer que mysql haga esto él mismo? He estado leyendo que puedo darle 'reglas' a la bbdd pero no me aclaro. También he leído algo sobre crear 'vistas' pero no se si son para valores ya existentes.

El motivo de hacer esto que es que tengo que comprobar si c>0 en algún caso, y si la columna 'c' ya existe me basta con un SELECT sencillito.

Si no, tendría que hacer una consulta para la columna 'a', otra para la 'b' y hacer las restas en tiempo de ejecución, cosa que quiero evitar.

Gracias
:)

Por daniel69

78 de clabLevel



 

firefox
Citar            
MensajeEscrito el 26 Abr 2010 03:46 am
Es tan sencillo que vas a querer pegarte un tiro xD

Código MySQL :

SELECT a, b, a + b as c FROM tabla;


Saludos.

Por DriverOp

Claber

2510 de clabLevel



 

opera
Citar            
MensajeEscrito el 26 Abr 2010 09:31 am
Hola DriverOp y gracias por contestar :)

Me he quedado loco con tu respuesta. Parece muy sencillo. Pero claro, eso es en tiempo de ejecución ¿no?

¿Qué es 'c'?
Es decir, ¿ 'c' la tengo que tener definida previamente en mysql (tal y como la tengo ahora, que es una columna más aunque sin valores) y al hacer ese SELECT que has puesto se rellena, o es otra cosa (una vista)?

La idea es tener 'a' , 'b' y 'c' para cada usuario, y regularmente comprobar si algún valor de c>0.
Por eso quiero saber si mysql puede hacerlo "internamente" para evitar hacer muchos SELECT, ya que si tengo 200 usuarios, son muchas consultas.

Por daniel69

78 de clabLevel



 

firefox
Citar            
MensajeEscrito el 26 Abr 2010 10:05 pm
Hola...
Pues 'c' es un alias que, para todo caso práctico, es un campo más de la tabla, y contiene el resultado de la suma de los campos 'a' y 'b'.
No entiendo bien tu objeción. Como yo lo veo solo tienes que realizar una sola consulta, la que te mostré. No nos dices de dónde salen 'a' y 'b'; ¿son campos de la tabla que tiene como índice el id o nombre de esos 200 usuarios de los que hablas?, si es así, basta que además de esos campos también devuelvas ese id:

Código PHP :

<?php
$result = mysql_query("SELECT id_usuario, a, b, a + b as c FROM tabla; ");
if ($row = mysql_fetch_assoc($result)) {
do {
  if ($row['c'] > 0) {
    echo "El usuario con ID: ".$row['id_usuario']." tiene su campo c mayor a cero<br>";
  }
} while($row = mysql_fetch_assoc($result));
}
?>

Por DriverOp

Claber

2510 de clabLevel



 

opera
Citar            
MensajeEscrito el 27 Abr 2010 10:30 am
Hola de nuevo

En efecto la tabla con esos 4 campos, 'a' , 'b' , 'c' y 'id-usuario'. La tabla guarda los pagos de un comercio, donde
a=precio producto
b=cantidad pagada (no siempre se paga al momento)
c=cantidad debida por el cliente ( que es 0 si ha pagado todo)

Si con la consulta se actualiza la columna 'c' tal y como me has dicho, perfecto, es lo que yo buscaba.

El proceso que quiero hacer es el siguiente:
- Cada vez que se hace una compra, actualizar 'c' en toda la tabla ( a - b = c )
- Hacer un listado de los clientes con alguna c>0 (reunir sus id's)
- Para cada id anterior, sumar todas las c de ese cliente para comprobar cuanto debe

Voy a intentar hacerlo con las respuestas que me has dado, y luego posteo las consultas por si alguien las necesitara.
Gracias ;)

Por daniel69

78 de clabLevel



 

firefox

 

Cristalab BabyBlue v4 + V4 © 2011 Cristalab
Powered by ClabEngines v4, HTML5, love and ponies.