elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Introducción a Git (Primera Parte)


+  Foro de elhacker.net
|-+  Programación
| |-+  Desarrollo Web
| | |-+  Bases de Datos (Moderador: Carloswaldo)
| | | |-+  [Resuelto] Crear Indice compuesto (AUTO_INCREMENT(DEL AÑO ACTUAL)+AÑO ACTUAL)
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: [Resuelto] Crear Indice compuesto (AUTO_INCREMENT(DEL AÑO ACTUAL)+AÑO ACTUAL)  (Leído 9,097 veces)
LaThortilla (Effort)

Desconectado Desconectado

Mensajes: 234


¿En que vida harás lo que en esta no?


Ver Perfil WWW
[Resuelto] Crear Indice compuesto (AUTO_INCREMENT(DEL AÑO ACTUAL)+AÑO ACTUAL)
« en: 19 Febrero 2015, 23:21 pm »

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:

Código
  1. BEGIN
  2. DECLARE con INT;
  3. SET con = (SELECT MAX(MID(tabla1.id,1,5))+1 FROM tabla1 WHERE YEAR(fecha) = YEAR(CURDATE()));
  4. SET NEW.id = CONCAT(LPAD(con, 5,'0'), '/', YEAR(CURDATE()));
  5. 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.


« Última modificación: 20 Febrero 2015, 18:33 pm por Effort » En línea

MinusFour
Moderador Global
***
Desconectado Desconectado

Mensajes: 5.529


I'm fourth.


Ver Perfil WWW
Re: [AYUDA] indices compuestos MYSQL
« Respuesta #1 en: 19 Febrero 2015, 23:59 pm »

Puedes hacerlo de varias formas, pero si quieres que lo maneje exclusivamente MySQL vas a necesitar usar trigger con INSERT.


En línea

LaThortilla (Effort)

Desconectado Desconectado

Mensajes: 234


¿En que vida harás lo que en esta no?


Ver Perfil WWW
Re: [AYUDA] indices compuestos MYSQL
« Respuesta #2 en: 20 Febrero 2015, 00:20 am »

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 ...


Código
  1.  
  2. DELIMITER \\
  3. CREATE TRIGGER MiTrigger AFTER INSERT ON MiTabla
  4. FOR EACH ROW
  5. BEGIN ...No se que hacer aqui supongo que ..
  6.  
  7. NEW.ID = Mi_index?
  8. END \\
  9. DELIMITER ;
En línea

MinusFour
Moderador Global
***
Desconectado Desconectado

Mensajes: 5.529


I'm fourth.


Ver Perfil WWW
Re: [AYUDA] indices compuestos MYSQL
« Respuesta #3 en: 20 Febrero 2015, 00:38 am »

Código
  1. CREATE TRIGGER concatId BEFORE INSERT ON tabla
  2. 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.
En línea

LaThortilla (Effort)

Desconectado Desconectado

Mensajes: 234


¿En que vida harás lo que en esta no?


Ver Perfil WWW
Re: [AYUDA] indices compuestos MYSQL
« Respuesta #4 en: 20 Febrero 2015, 01:21 am »

Tengo este trigger funcionando en la base

Código
  1. CREATE TRIGGER concatId BEFORE INSERT ON tabla
  2.  
  3. FOR EACH ROW BEGIN
  4.  
  5.  SET NEW.IDYEAR =  CONCAT(LPAD(NEW.ID, 5, '0'),'/','2015');
  6. END
donde ID es auto_increment y IDYEAR es varchar(15)
y como resultado al insertar tengo esto

Código
  1. 00000/2015

que hago mal?
En línea

MinusFour
Moderador Global
***
Desconectado Desconectado

Mensajes: 5.529


I'm fourth.


Ver Perfil WWW
Re: [AYUDA] indices compuestos MYSQL
« Respuesta #5 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 línea

LaThortilla (Effort)

Desconectado Desconectado

Mensajes: 234


¿En que vida harás lo que en esta no?


Ver Perfil WWW
Re: [AYUDA] indices compuestos MYSQL
« Respuesta #6 en: 20 Febrero 2015, 02:26 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?
En línea

MinusFour
Moderador Global
***
Desconectado Desconectado

Mensajes: 5.529


I'm fourth.


Ver Perfil WWW
Re: [AYUDA] indices compuestos MYSQL
« Respuesta #7 en: 20 Febrero 2015, 02:34 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:

Código
  1. SELECT CONCAT(LPAD(tabla.id, 5 '0'), '/', tabla.año) AS idYear
  2. FROM tabla
En línea

LaThortilla (Effort)

Desconectado Desconectado

Mensajes: 234


¿En que vida harás lo que en esta no?


Ver Perfil WWW
Re: [AYUDA] indices compuestos MYSQL
« Respuesta #8 en: 20 Febrero 2015, 02:50 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:

Código
  1. SELECT CONCAT(LPAD(tabla.id, 5 '0'), '/', tabla.año) AS idYear
  2. FROM tabla

Necesito este formato por la razón que el index se reinicia cada año :/



Pero te agradezco mucho tu ayuda...
En línea

LaThortilla (Effort)

Desconectado Desconectado

Mensajes: 234


¿En que vida harás lo que en esta no?


Ver Perfil WWW
Re: [Resuelto] Crear Indice compuesto (AUTO_INCREMENT(DEL AÑO ACTUAL)+AÑO ACTUAL)
« Respuesta #9 en: 20 Febrero 2015, 18:28 pm »

Solución:
Crear un Trigger Asi:


Código
  1. BEGIN
  2. DECLARE con INT;
  3. SET con = (SELECT MAX(MID(tabla1.id,1,5))+1 FROM tabla1 WHERE YEAR(fecha) = YEAR(CURDATE()));
  4. SET NEW.id = CONCAT(LPAD(con, 5,'0'), '/', YEAR(CURDATE()));
  5. END

donde id es varchar(15);

Cualquier otra solución bienvenida seaa;
En línea

Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
Mejor FPS Actual
Juegos y Consolas
Zinc 2 1,732 Último mensaje 31 Diciembre 2006, 15:28 pm
por DJ46
[XSS] en PC Actual ?
Nivel Web
alienmaster 2 3,260 Último mensaje 17 Abril 2008, 18:28 pm
por ANELKAOS
Cómo obtener la semana actual a partir del día actual
Bases de Datos
cpichi.cu 4 11,036 Último mensaje 25 Septiembre 2018, 17:25 pm
por cchianalino
[?] Librito de ASM actual?
ASM
MeCraniDOS 5 3,771 Último mensaje 12 Enero 2015, 20:04 pm
por MeCraniDOS
Crear directorio del mes actual en BAT « 1 2 3 »
Scripting
ferrec 29 19,248 Último mensaje 5 Agosto 2016, 11:58 am
por Eleкtro
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines