Re: [PHP-ES] Re: Restar y sumar valor de campo mysql

[email protected] (Anto)
Newsgroups php.general.es
Message-ID <CA+Ecp7Qmuj60dhs+KHQVqMC-nP=XUeVDNSute4_UDgvoxBgcug@mail.gmail.com>
hola

Muchas gracias a ambos por responder. Si, tenia mas claro el tema de
las tablas y demas; lo que no tan claro es lo del la tabla que tiene
el contador. Quizas me explique mejor con un ejemplo:

La tabla con las transacciones tiene diarias por usuario por ejemplo
500 insercciones. Entonces si por ejemplo quiero mostrar el total,
cada vez que se solicite, hago un sumatorio de todos los movimientos
por ese usuario, seria muy pesado (hay mas usuarios y cada vez que se
quiera consultar), entonces por eso habia pensado otra tabla que por
cada registro sume o reste del total. Pero claro, no tengo tan claro
si en una sql puedo sumar o restar segun su valor. Entonces se me
ocurria hacer primero un select, almacenar en una variable el valor
del campo total y operar (sumar o restar) segun la variable y hacer el
insert, pero claro, son dos consultas, aparte de la tabla de
movimientos (que seria una tercera).

Esta es mi duda, si podria hacer mediante una sentencia algo que sume
o reste segun el valor insertado en la otra. Es que desconozco si hay
algun "modificador" o "parametro" que le diga, haz un update sumando o
restando al valor actual. Habia pensado usar un trigger porque asi
tampoco dependo de la programacion, pero tambien mirando seria tambien
como dos query (bajo mis conocimientos). Ufff, tengo super olvidado
mysql. Haber si alguien me puede decir si existe algo para hacerlo en
una query y ya busco como seria jeje. Gracias a tdos.

saludos

El día 27 de octubre de 2011 08:27, Carlos Medina
<[email protected]> escribió:
> Am 27.10.2011 00:04, schrieb Anto:
>> hola
>>
>> tengo una duda sobre rendimiento en mysql, estoy haciendo una
>> aplicacion que tiene movimientos de dinero, se inserta en un campo el
>> usuario, otro la fecha y si es descuento (ej. -100) o si es ingreso
>> (100), pero para no estar constantemente en cada inserccion, habia
>> pensado crear otra tabla que almacene los totales, asi me evito hacer
>> en cada consulta otra posterior que haga un sum para saber los
>> totales. ¿Que es lo mejor para esto? Hacer un trigger que me sume o
>> reste el valor introducido en el total o hacerlo mediante php y
>> consultas (¿primero una lectura del total, almacenar el valor en una
>> variable, sumarle o restarle el que se añade y hacer un insert????),
>> es que desconozco si se puede hacer con una sola linea de sql, solo se
>> me ocurre el trigger. muchas gracias
>>
>> saludos
> Hola,
> lo puedes hacer todo des de el SQL en una sola linea. Lo importante es
> que tengas en cuenta dos cosas:
>
> 1.- Si los movimientos de saldo son importantes, has de usar
> transacciones para evitar datos inconsistentes.
>
> 2.- Si los movimientos de saldo son muchos, has de usar una tabla nueva
> donde almacenes los estados de cuenta.
>
> Puedes hacer pues los movimientos de saldo como dijiste en una tabla con
> los campos como
>
> id (auto, PK);
> usuario_cuenta (int, FK);
> usuario_saldo (int);
> usuario_date (datetime);
>
> Con esto puedes saber, que dia y que hora se hizo la transaccion de
> dinero en si.
>
> Con la tabla estados de cuenta:
>
> id (auto, PK);
> estados_cuenta (int, FK);
> estados_saldo (int)
> estados_date (datetime)
>
> Aqui puedes saber, que estados de cuenta tiene un cliente a determinada
> valuta. Date cuenta que he puesto en vez de un usuario id, una *_cuenta
> als FK, para referenciar los usuarios por numero de cuenta. Acuerdate
> que si manejas valores de tipo int, las operaciones seran mas rapidas.
> Ademas tienes que darle a las tablas el engine adecuado. Por ejempo si
> vas a hacer muchas preguntas a la tabla (el caso de los estados de
> cuenta) pues usas myisam que es mas rapida en la lectura. Para grabar
> los movimientos de saldo pues usas InnoDB. Hay otras engines que puedes
> usar como BDB.
>
> Si esto aun no lo es todo y deseas o tienes que sacar mucha mas
> informacion en menos tiempo, te recomiendo pues usar memcached. Aqui
> tienes que tener mucho cuidado al usar esto pues es un store System que
> te permite hacer cosas muy buenas pero tambien burradas costosas.
>
> Si trabajas con Memcached pues sabras que solo puedes grabar valores
> tipo KEY -> VALUE.
> Es decir tienes que declarar tus namespaces por ti mismo. Por ejemplo asi:
>
> ESTADO_DE_CUENTA.CLIENTE_NR1.DATE_MOVIMIENTO1.TIPO_VALOR1 = -100
> ESTADO_DE_CUENTA.CLIENTE_NR1.DATE_MOVIMIENTO1.TIPO_VALOR1 = 10
>
> En este sentido puedes acceder a los valores usando una recursion sobre
> los keys puestos. Los Estados de cuenta los sacas asi:
>
> ESTADO_DE_CUENTA = {CLIENTE_NR1, CLIENTE_NR2, CLIENTE_NR3}
>
> Los Movimientos
>
> CLIENTE_NR1 = {DATE_MOVIMIENTO1,DATE_MOVIMIENTO2,DATE_MOVIMIENTO3}
>
> Asi hasta que lleges a los valores que deseas. Usando memcached pedes
> hacer operaciones en milisegundos.
>
> Espero te sirva.
>
> Saludos
>
> Carlos Medina
>
> --
> PHP Spanish Localization Talk Mailing List (http://www.php.net/)
> To unsubscribe, visit: http://www.php.net/unsub.php
>
>
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.