Buenas tardes.
Tengo una tabla con id auto increment
--------------------------------
ID |fecha_creado
-------------------------------
como puedo hacer para que cada ves que haga un INSERT se concatene el año a el index.
ASI: 0000/2014
Solución:
Crear un Trigger Asi:
BEGIN
DECLARE con INT;
SET con = (SELECT MAX(MID(tabla1.id,1,5))+1 FROM tabla1 WHERE YEAR(fecha) = YEAR(CURDATE()));
SET NEW.id = CONCAT(LPAD(con, 5,'0'), '/', YEAR(CURDATE()));
END
donde id es varchar(15);
Dato que me pareció interesante:
el AUTO_INCREMENT no es mas que un MAX(INDEX)...EJ: si se ingresa un id 50 aun que sea en el primer registro el AUTO_INDEX será 51.
probado y funcionando Gracias.. cualquier otra solución bienvenida sea....
Gracias.
Puedes hacerlo de varias formas, pero si quieres que lo maneje exclusivamente MySQL vas a necesitar usar trigger con INSERT.
No manejo muy bien el tema de triggers y procedimientos en mysql pero buscare... tengo que leer un manual :/ ... ni modo..
Si me ayudas solo con esto te lo agradecería ...
DELIMITER \\
CREATE TRIGGER MiTrigger AFTER INSERT ON MiTabla
FOR EACH ROW
BEGIN ...No se que hacer aqui supongo que ..
new.ID = Mi_index?
END \\
DELIMITER ;
CREATE TRIGGER concatId BEFORE INSERT ON tabla
FOR EACH ROW SET NEW.idFecha = CONCAT(NEW.id, '/', NEW.fecha);
Asumiendo que id no es auto_increment y que tienes un campo para fecha para el año y un campo idFecha para el resultado del string concatenado.
Tengo este trigger funcionando en la base
CREATE TRIGGER concatId BEFORE INSERT ON tabla
FOR EACH ROW BEGIN
SET NEW.IDYEAR = CONCAT(LPAD(NEW.ID, 5, '0'),'/','2015');
END
donde ID es auto_increment y IDYEAR es varchar(15)
y como resultado al insertar tengo esto
00000/2015
que hago mal?
El campo Id probablemente sea un campo con auto_increment. En la documentacion de MySQL lo explican, el campo aparece hasta despues de la insercion. Con AFTER INSERT tampoco puedes hacer el UPDATE a NEW.
Cita de: MinusFour en 20 Febrero 2015, 01:25 AM
El campo Id probablemente sea un campo con auto_increment. En la documentacion de MySQL lo explican, el campo aparece hasta despues de la insercion. Con AFTER INSERT tampoco puedes hacer el UPDATE a NEW.
En ese caso tendría que incrementarlo manual mente NO?
como podría hacer una consulta y guardarlo en una variable desde el trigger?
Cita de: Effort en 20 Febrero 2015, 02:26 AM
En ese caso tendría que incrementarlo manual mente NO?
como podría hacer una consulta y guardarlo en una variable desde el trigger?
No es tan sencillo. Como te dije, el campo se asigna despues de la insercion (AFTER) y no en antes (BEFORE) y no puedes actualizar el registro en ese entonces.
Porque no en lugar de repetir la informacion haces CONCAT en las consultas. Asi no repites informacion de la tabla:
SELECT CONCAT(LPAD(tabla.id, 5 '0'), '/', tabla.año) AS idYear
FROM tabla
Cita de: MinusFour en 20 Febrero 2015, 02:34 AM
No es tan sencillo. Como te dije, el campo se asigna despues de la insercion (AFTER) y no en antes (BEFORE) y no puedes actualizar el registro en ese entonces.
Porque no en lugar de repetir la informacion haces CONCAT en las consultas. Asi no repites informacion de la tabla:
SELECT CONCAT(LPAD(tabla.id, 5 '0'), '/', tabla.año) AS idYear
FROM tabla
Necesito este formato por la razón que el index se reinicia cada año :/
Pero te agradezco mucho tu ayuda...
Solución:
Crear un Trigger Asi:
BEGIN
DECLARE con INT;
SET con = (SELECT MAX(MID(tabla1.id,1,5))+1 FROM tabla1 WHERE YEAR(fecha) = YEAR(CURDATE()));
SET NEW.id = CONCAT(LPAD(con, 5,'0'), '/', YEAR(CURDATE()));
END
donde id es varchar(15);
Cualquier otra solución bienvenida seaa;