Ver Mensaje Individual
  #5 (permalink)  
Antiguo 25/12/2012, 19:33
malbo
 
Fecha de Ingreso: junio-2012
Mensajes: 7
Antigüedad: 11 años, 10 meses
Puntos: 0
Respuesta: Update deun campo sumandose a si mismo

Gracias por la respuesta!!
Igualmente lo que necesito es tomar sólo la hora, con los minutos y segundos en 0, ya que lo que hago es generar bloques por hora sobre un mismo registro que va sólo actualizando un campo en el que cuento la cantidad de impresiones que se generan.
La clave única, con varios campos es porque en esa tabla genero el autoincremental, para relacionarlo a otras y la clave única para no generar valores repetidos de distintas campañas por hora.
O sea me serviría tanto guardar algo así 22:00:00 como así 22, pero no con los minutos y segundos que no sea 00 porque me generaría muchos registros y esto lo estoy preparando para contar 10 billones de registros por mes. Adjunto los códigos para que se pueda entender mejor el problema.

Esta es la estructura de la tabla:

CREATE TABLE IF NOT EXISTS `ads_tracking_clics` (
`id_clic` int(11) NOT NULL AUTO_INCREMENT,
`id_campaign` int(11) NOT NULL,
`id_source` int(11) NOT NULL,
`id_network` int(11) NOT NULL,
`count` decimal(10,0) NOT NULL,
`value` decimal(10,4) DEFAULT NULL COMMENT 'último valor',
`value_cum` decimal(10,4) DEFAULT NULL COMMENT 'valor acumulado',
`date` date NOT NULL,
`hour` time NOT NULL,
PRIMARY KEY (`id_clic`),
UNIQUE KEY `key_clics` (`id_campaign`,`id_source`,`id_network`,`date`,`ho ur`),
KEY `id_campaign` (`id_campaign`),
KEY `id_source` (`id_source`),
KEY `id_network` (`id_network`),
KEY `date` (`date`),
KEY `hour` (`hour`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci AUTO_INCREMENT=1 ;

Y así tengo la consulta hasta ahora:

$query = "INSERT INTO ads_tracking_clics (id_campaign, id_source, id_network, count, value, value_cum, `DATE`, `HOUR`) VALUES (1253, 1, 2, 1, 1.15, 1.15, CURDATE(), HOUR(CURTIME())) ON DUPLICATE KEY UPDATE count = count + 1, value = 1.15, value_cum = value_cum + value, id_clic = LAST_INSERT_ID(id_clic)";
$result = mysql_query($query);

// PROCEDURE SetClic(id_tracking, id_carrier, id_category, id_country, id_language, id_model, id_os, id_resolution, id_slot)
if($result){
$query = "CALL SetClic(".mysql_insert_id().", 1, 1, 13, 2, 45, 3, 5, 4567)";
$result = mysql_query($query);
}

Y el Stored Procedure en la base es así:

DELIMITER //
CREATE PROCEDURE SetClic(IN id_tracking INT(11), IN id_carrier INT(11), IN id_category INT(11), IN id_country INT(11), IN id_language INT(11), IN id_model INT(11), IN id_os INT(11), IN id_resolution INT(11), IN id_slot INT(11))
BEGIN
INSERT INTO ads_tracking_carrier (id_tracking, id_carrier, count, `action`) VALUES (id_tracking, id_carrier, 1, 2) ON DUPLICATE KEY UPDATE count = count + 1;
INSERT INTO ads_tracking_category (id_tracking, id_category, count, `action`) VALUES (id_tracking, id_category, 1, 2) ON DUPLICATE KEY UPDATE count = count + 1;
INSERT INTO ads_tracking_countries (id_tracking, id_country, count, `action`) VALUES (id_tracking, id_country, 1, 2) ON DUPLICATE KEY UPDATE count = count + 1;
INSERT INTO ads_tracking_language (id_tracking, id_language, count, `action`) VALUES (id_tracking, id_language, 1, 2) ON DUPLICATE KEY UPDATE count = count + 1;
INSERT INTO ads_tracking_model (id_tracking, id_model, count, `action`) VALUES (id_tracking, id_model, 1, 2) ON DUPLICATE KEY UPDATE count = count + 1;
INSERT INTO ads_tracking_os (id_tracking, id_os, count, `action`) VALUES (id_tracking, id_os, 1, 2) ON DUPLICATE KEY UPDATE count = count + 1;
INSERT INTO ads_tracking_resolution (id_tracking, id_resolution, count, `action`) VALUES (id_tracking, id_resolution, 1, 2) ON DUPLICATE KEY UPDATE count = count + 1;
INSERT INTO ads_tracking_slot (id_tracking, id_slot, count, `action`) VALUES (id_tracking, id_slot, 1, 2) ON DUPLICATE KEY UPDATE count = count + 1;
END //
DELIMITER ;