Ver Mensaje Individual
  #4 (permalink)  
Antiguo 02/02/2009, 07:10
Avatar de Marvin
Marvin
Colaborador
 
Fecha de Ingreso: febrero-2005
Ubicación: global $Chile->Santiago;
Mensajes: 1.991
Antigüedad: 19 años, 3 meses
Puntos: 81
Respuesta: Scrip PHP que haga varias Funciones

Ok... entonces tienes la posibilidad de que la base de datos haga lo que tu necesitas con una funcion llamada TRIGGER (la siguiente sera la trigger que te servira para el historial).

Te explico un poco como funciona el siguiente:
Código:
DELIMITER |
CREATE TRIGGER agregaHistorial BEFORE INSERT ON pagos  FOR EACH ROW BEGIN
     SET @proximo_id = (SELECT MAX(orders_status_history_id)+1 FROM orders_status_history);
     INSERT INTO orders_status_history
     SET orders_status_history_id = @proximo_id,
     orders_id = NEW.orders_id,
     orders_status_id = 2,
     date_added = NEW.date_added,
     customer_notified = 1,
     comments = 'Pago procesado Via Web';
     UPDATE orders SET orders_status_id = 2 WHERE orders_id = NEW.orders_id;
  END;
| DELIMITER;
DELIMITER |: Delimitamos donde comenzara el trozo de funcion a ejecutar.
CREATE TRIGGER agregaHistorial BEFORE INSERT ON pagos FOR EACH ROW: Creamos un disparador (trigger) que se llama agregaHistorial y se ejecutara antes de un insert en pagos (before insert on pagos) y para cada registro ingresado (for each row)
BEGIN: Comienza el bloque de ejecucion.
SET @proximo_id = (SELECT MAX(orders_status_history_id)+1 FROM orders_status_history);: Creamos una variable para guardar el proximo ID de la tabla orders_status_history
INSERT INTO orders_status_history: Insertaremos en la tabla orders_status_history
SET orders_status_history_id = @proximo_id,: Ingresaremos el id que sacamos arriba.
orders_id = NEW.orders_id,: Ingresaremos el ID del pago ingresado.
orders_status_id = 2,: El status que has mencionado anteriormente.
date_added = NEW.date_added,: La fecha del pago.
customer_notified = 1,: La notificacion que dijiste tambien.
comments = 'Pago procesado Via Web';: Y el comentario señalado.
UPDATE orders SET orders_status_id = 2 WHERE orders_id = NEW.orders_id;: Actualizamos el status de la orden en la tabla orders.
END;: Termina el bloque de ejecucion.
| DELIMITER;: Delimitacion que termina nuestra trigger.

Una vez ejecutada esta trigger en tu base de datos (y es necesario ejecutarla solo una vez), cada vez que hagas un insert en la tabla pagos, se ejecutara esto y te hara solo el insert de datos en la tabla orders_status_history + la actualizacion de la tabla orders.

Recuerda que todos los datos que he usado en esta consulta, los use solo asumiendo que son los correctos. De haber algun cambio, deberas reemplazarlos en la trigger. Si por X razon ya ejecutaste la trigger y quieres cambiarle algo, debes eliminarla primero para editarla y luego volver a crearla, ejemplo:
-> ejecuto el create trigger con todo lo de arriba.
-> quiero cambiarla por lo tanto escribo esto:
Código:
DROP TRIGGER agregaHistorial;
-> la vuelvo a ejecutar con las modificaciones.

Cualquier duda no dudes en consultarnos.

Suerte!
__________________
El que dice "Solo sé que nada sé", esta asumiendo que sabe algo.
Lea las FAQ's!