Foros del Web » Programación para mayores de 30 ;) » Bases de Datos General » Mysql »

[SOLUCIONADO] problema con enumeracion repetida

Estas en el tema de problema con enumeracion repetida en el foro de Mysql en Foros del Web. Tengo un problemacon la enumeracion ,tengo varios registros con una cedula (ced) y lo que quiero es que en un campo (num) se cree una ...
  #1 (permalink)  
Antiguo 22/03/2013, 18:46
 
Fecha de Ingreso: febrero-2013
Mensajes: 26
Antigüedad: 11 años, 10 meses
Puntos: 0
problema con enumeracion repetida


Tengo un problemacon la enumeracion ,tengo varios registros con una cedula (ced) y lo que quiero es que en un campo (num) se cree una enumeracion del 1 al ... en orden ascendente mediante la cedula.Algo asi
num-------ced
1 ----- HECE740923
2 ----- HECD501223
3------ HECD501223
4-------HECD501023
5-------HRCR502345

pero con la consulta de abajo me resulta asi (las cedulas iguales laas coloca con un numero igual y al pasar a otra cedula diferente sigue con la enumeracion)
1 ----- HATR740923
2 ----- HECD501223
2------ HECD501223
2-------HECD501023
5-------HRCR502345




Código PHP:
CREATE TEMPORARY TABLE temp 
SELECT  
(@rnum := @rnum +1numfced 
FROM exp
, (SELECT @rnum :=0
ORDER BY ced ASC

UPDATE exp t
temp t2 
SET num 
numf 
WHERE t
.ced t2.ced 
Alguien me podria decir donde esta mal y ayudarme se los agredeceria
  #2 (permalink)  
Antiguo 22/03/2013, 19:11
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 17 años
Puntos: 2658
Respuesta: problema con enumeracion repetida

Tienes las cedulas repetidas. Eso genera la repetición de la relación al hacer un JOIN en el UPDATE.
¿No sería mejor que depuraras esa tabla, eliminando las repeticiones de los numero de cédula?
De lo contrario jamás podrás resolver la numeración consecutiva...
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #3 (permalink)  
Antiguo 23/03/2013, 12:00
 
Fecha de Ingreso: febrero-2013
Mensajes: 26
Antigüedad: 11 años, 10 meses
Puntos: 0
Respuesta: problema con enumeracion repetida

Cita:
Iniciado por gnzsoloyo Ver Mensaje
Tienes las cedulas repetidas. Eso genera la repetición de la relación al hacer un JOIN en el UPDATE.
¿No sería mejor que depuraras esa tabla, eliminando las repeticiones de los numero de cédula?
De lo contrario jamás podrás resolver la numeración consecutiva...
Lo que pasa que estos numeros de cedula tienen otros campos uno de nombre y apellidos por eso no los puedo eliminar.

Ó alguna otra manera de realizar la enumeracion.

Última edición por gnzsoloyo; 23/03/2013 a las 12:46
  #4 (permalink)  
Antiguo 23/03/2013, 12:50
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 17 años
Puntos: 2658
Respuesta: problema con enumeracion repetida

Creo qu eno me estás entendiendo, y además parece que tienes un serio problema de diseño en la base y/o consistencia de datos...
empecemos aclarando un punto que nos puede ayudar a ver el problema: ¿Qué es lo que representa esa tabla "EXP"?
Y otra: Si esa tabla identifica determinadas personas en un contexto, ¿por qué se están pudiendo ingresar cédulas repetidas en diferentes registros? Si me explicas eso, podemos acercarnos a una solución que sea adecuada.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #5 (permalink)  
Antiguo 23/03/2013, 22:28
 
Fecha de Ingreso: febrero-2013
Mensajes: 26
Antigüedad: 11 años, 10 meses
Puntos: 0
Respuesta: problema con enumeracion repetida

Cita:
Iniciado por gnzsoloyo Ver Mensaje
Creo qu eno me estás entendiendo, y además parece que tienes un serio problema de diseño en la base y/o consistencia de datos...
empecemos aclarando un punto que nos puede ayudar a ver el problema: ¿Qué es lo que representa esa tabla "EXP"?
Y otra: Si esa tabla identifica determinadas personas en un contexto, ¿por qué se están pudiendo ingresar cédulas repetidas en diferentes registros? Si me explicas eso, podemos acercarnos a una solución que sea adecuada.
La tabla exp tiene campos de num,cedula ,nombre,apellido peterno y materno.
Es por eso que la cedula puede ser repetida por que pueden ser familiares ya que está compuesta como un rfc.Lo que se diferencian son los nombres y sus apellidos

Ya tengo todos los datos y lo que quiero hacer es asignarles un numero a cada uno ordenandolos por orden alfabetico por la cedula y se repite como es el caso con el apellido en segundo lugar del 1 hasta donde lleguen que son 2800.Ya esos registros son todos y ya no se vana recorrer ni mover,por eso asignarles su numero.Intente hacerlo con un ciclo pero solo lo mostraba y no lo pude guardar en el campo num,no se si me explico.Lo que pretendo es que quede algo así:
num cedula Apellido pat
1 ----- HECA740923 Sanchez
2 ----- HECD501223 Avalos
3------ HECD501223 Contreras
4-------HECD501023 Cortes
5-------HRCR502345 Salinas

Última edición por drsheldoncooper; 23/03/2013 a las 22:35
  #6 (permalink)  
Antiguo 24/03/2013, 04:54
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 17 años
Puntos: 2658
Respuesta: problema con enumeracion repetida

Acá lo importante es lo que estás diciendo:
Cita:
la cedula puede ser repetida por que pueden ser familiares ya que está compuesta como un rfc
Esto implica que la cédula sola no puede ser tomada como argumento discriminante, porque tiene una relación N:N con la misma tabla, y por tanto usarla como referncia única es incorrecto.
El ejercicio se puede hacer, pero sólo usando lo que se conoce como "superclave", que es el conjunto de atributos que puede ser determinante (ver conceptos fundamentales de Normalización), esto es, hay que tomar esa céducla juto con el resto de los atributos, tanto para numerar como para actualizar.

Código MySQL:
Ver original
  1. SELECT  (@rnum := @rnum +1) numf, num, cedula ,nombre,apellidoPat , ApellidoMat
  2. FROM exp JOIN (SELECT @rnum :=0) x
  3. ORDER BY num, cedula ,nombre, apellidoPat , ApellidoMatASC

Código MySQL:
Ver original
  1. UPDATE exp t, temp t2
  2. SET num = numf
  3.     t.num = T2.num
  4.     AND t.cedula = T2.cedula
  5.     AND t.nombre = T2.nombre
  6.     AND t.apellidoPat  = T2. ApellidoPat
  7.     AND t.ApellidoMat = T2.ApellidoMat;


Hay algunas observaciones que tengo que hacerte:
1) No me has respondido lo que te pregunté: ¿Qué representa esa tabla?
2) Tienes que recordar que no en todos los países ciertos conceptos tienen el mismo significado. No sé qué es una "cédula" en México, pero en Argentina es un documento supletorio de identidad de las personas, y como tal es imposible que en un registro de personas haya dos con la misma cédula, porque su numeración es única para cada individuo.
En este sentido, el parentesco entre dos personas no es relevante para la documentación, por lo que no entiendo la relación entre ambas cosas.
3) No tengo ni idea de a qué te refieres con "RFC", porque a mi entender, RFC es "Request For Comment", es decir una referencia de comentarios del IEEE, y como tal una documentación de estandarización que se relaciona principalmente con redes... cosa que no creo sea el caso.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #7 (permalink)  
Antiguo 24/03/2013, 10:58
 
Fecha de Ingreso: febrero-2013
Mensajes: 26
Antigüedad: 11 años, 10 meses
Puntos: 0
Respuesta: problema con enumeracion repetida

Cita:
Iniciado por gnzsoloyo Ver Mensaje
Acá lo importante es lo que estás diciendo:
Esto implica que la cédula sola no puede ser tomada como argumento discriminante, porque tiene una relación N:N con la misma tabla, y por tanto usarla como referncia única es incorrecto.
El ejercicio se puede hacer, pero sólo usando lo que se conoce como "superclave", que es el conjunto de atributos que puede ser determinante (ver conceptos fundamentales de Normalización), esto es, hay que tomar esa céducla juto con el resto de los atributos, tanto para numerar como para actualizar.

Código MySQL:
Ver original
  1. SELECT  (@rnum := @rnum +1) numf, num, cedula ,nombre,apellidoPat , ApellidoMat
  2. FROM exp JOIN (SELECT @rnum :=0) x
  3. ORDER BY num, cedula ,nombre, apellidoPat , ApellidoMatASC

Código MySQL:
Ver original
  1. UPDATE exp t, temp t2
  2. SET num = numf
  3.     t.num = T2.num
  4.     AND t.cedula = T2.cedula
  5.     AND t.nombre = T2.nombre
  6.     AND t.apellidoPat  = T2. ApellidoPat
  7.     AND t.ApellidoMat = T2.ApellidoMat;


Hay algunas observaciones que tengo que hacerte:
1) No me has respondido lo que te pregunté: ¿Qué representa esa tabla?
2) Tienes que recordar que no en todos los países ciertos conceptos tienen el mismo significado. No sé qué es una "cédula" en México, pero en Argentina es un documento supletorio de identidad de las personas, y como tal es imposible que en un registro de personas haya dos con la misma cédula, porque su numeración es única para cada individuo.
En este sentido, el parentesco entre dos personas no es relevante para la documentación, por lo que no entiendo la relación entre ambas cosas.
3) No tengo ni idea de a qué te refieres con "RFC", porque a mi entender, RFC es "Request For Comment", es decir una referencia de comentarios del [URL="http://es.wikipedia.org/wiki/IEEE"][B]IEEE[/B][/URL], y como tal una documentación de estandarización que se relaciona principalmente con redes... cosa que no creo sea el caso.
La tabla exp es un expediente y es donde se guardan todos los registros que ya los tengo almacenados en ella solo me falta asignarles un numero para su identificacion pero ordenados alfabeticamente mediante la cedula y despues con el apellido.Como te habia mencionado lo intente con un ciclo pero no logre guardarlo en el campo num solo lo mostraba.

La cedula se compone de las dos primeras letras de cada apellido seguido por su fecha de nacimiento, es por eso que se pueden repetir por coincidencias o por ser familiares.Es parecido a un rfc que aquí en México es para registro federal de contribuyentes .

Lo que los va a identificar es este numero "num" que quiero asignarle a cada uno del 1 al 2800 ya ordenados alfabeticamente.Y la tabla "temp" solo la ocupo para crear un campo "numf" y hacer la enumeracion y pasarla al campo num de la tabla "exp".

Ojalá me puedas ayudar o si se puede hacer de otra forma.Te lo agredeceria mucho.Probe lo el script que me proporcionaste pero me hace lo mismo.
  #8 (permalink)  
Antiguo 24/03/2013, 11:04
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 17 años
Puntos: 2658
Respuesta: problema con enumeracion repetida

Cita:
Ojalá me puedas ayudar o si se puede hacer de otra forma.Te lo agredeceria mucho.Probe lo el script que me proporcionaste pero me hace lo mismo.
Dudaría mucho que lo que yo te pasé haga lo mismo, porque el ordenamiento de la primera y las condiciones del UPDATE son completamente diferentes a tu planteo.
Analiza con cuidado lo que puse y verifica nuevamente los datos. Si sigue existiendo el problema sólo puede ocurrir si hay repeticiones también en la combinación nombre+apellidopaterno+apellidomaterno. Y si es así deberás analizar otra forma de generar la agrupación.

PD: En Argentina, el RFC que mencionas se denomina CUIT o CUIL (comercial o laboral), y es único también para cada contribuyente. No puede haber dos iguales para dos personas distitnas.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #9 (permalink)  
Antiguo 24/03/2013, 11:12
 
Fecha de Ingreso: febrero-2013
Mensajes: 26
Antigüedad: 11 años, 10 meses
Puntos: 0
Respuesta: problema con enumeracion repetida

Cita:
Iniciado por gnzsoloyo Ver Mensaje
Dudaría mucho que lo que yo te pasé haga lo mismo, porque el ordenamiento de la primera y las condiciones del UPDATE son completamente diferentes a tu planteo.
Analiza con cuidado lo que puse y verifica nuevamente los datos. Si sigue existiendo el problema sólo puede ocurrir si hay repeticiones también en la combinación nombre+apellidopaterno+apellidomaterno. Y si es así deberás analizar otra forma de generar la agrupación.

PD: En Argentina, el RFC que mencionas se denomina CUIT o CUIL (comercial o laboral), y es único también para cada contribuyente. No puede haber dos iguales para dos personas distitnas.
Es bueno aprender de otros lugares.Me dice que el campo num del primer select es ambiguo.

No se podria hacer de alguna otra forma para asignarles la numeracion,ya que estan ordenados todos asignarles un numero como un ciclo.
  #10 (permalink)  
Antiguo 24/03/2013, 12:00
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 17 años
Puntos: 2658
Respuesta: problema con enumeracion repetida

Cita:
Me dice que el campo num del primer select es ambiguo.
Eso debe ser sin dudas en el UPDATE:
Código MySQL:
Ver original
  1. UPDATE EXP t, temp t2
  2. SET t.num = t2.numf
  3.     t.num = T2.num
  4.     AND t.cedula = T2.cedula
  5.     AND t.nombre = T2.nombre
  6.     AND t.apellidoPat  = T2. ApellidoPat
  7.     AND t.ApellidoMat = T2.ApellidoMat;
Ahora bien, no me has dicho cuál es la clave primaria (PK) de esta tabla "EXP", por lo que te advierto que si la PK es ese campo "NUM", no se la puede renumerar a menos que se haga todo un proceso de actualizaciones a todas las tablas donde esa PK esté como FK.
¿Eso lo has tenido en cuenta?

Eso último me lleva a pensar en cuál es realmente la razón para todo este asunto, porque si "NUM" es PK, o al menos contiene números únicos en la tabla, ¿por qué renumerarlo?... Eso no tendría sentido. Ni utilidad.

¿NUM es PK o no?
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #11 (permalink)  
Antiguo 24/03/2013, 12:34
 
Fecha de Ingreso: febrero-2013
Mensajes: 26
Antigüedad: 11 años, 10 meses
Puntos: 0
Respuesta: problema con enumeracion repetida

Cita:
Iniciado por gnzsoloyo Ver Mensaje
Eso debe ser sin dudas en el UPDATE:
Código MySQL:
Ver original
  1. UPDATE EXP t, temp t2
  2. SET t.num = t2.numf
  3.     t.num = T2.num
  4.     AND t.cedula = T2.cedula
  5.     AND t.nombre = T2.nombre
  6.     AND t.apellidoPat  = T2. ApellidoPat
  7.     AND t.ApellidoMat = T2.ApellidoMat;
Ahora bien, no me has dicho cuál es la clave primaria (PK) de esta tabla "EXP", por lo que te advierto que si la PK es ese campo "NUM", no se la puede renumerar a menos que se haga todo un proceso de actualizaciones a todas las tablas donde esa PK esté como FK.
¿Eso lo has tenido en cuenta?

Eso último me lleva a pensar en cuál es realmente la razón para todo este asunto, porque si "NUM" es PK, o al menos contiene números únicos en la tabla, ¿por qué renumerarlo?... Eso no tendría sentido. Ni utilidad.

¿NUM es PK o no?
Tienes razon ya lo probe por partes y si es en el update y referente a la pk,aunque parezca informal no tenia ninguna pk la tabla exp.Lo que pasa que solo llene la tabla con los datos y pense q una vez que estuvieran todos ordenarlos y colocarles su numero que les correspondia.

Es por eso que cree un nuevo campo "num" lo cual esta vacío.

Ya que estuviera echo todo "num" seria la pk de la tabla,espero que tenga una solucion mi enredo.

Última edición por drsheldoncooper; 25/03/2013 a las 10:57
  #12 (permalink)  
Antiguo 25/03/2013, 14:39
 
Fecha de Ingreso: febrero-2013
Mensajes: 26
Antigüedad: 11 años, 10 meses
Puntos: 0
Respuesta: problema con enumeracion repetida

Cita:
Iniciado por drsheldoncooper Ver Mensaje
Tienes razon ya lo probe por partes y si es en el update y referente a la pk,aunque parezca informal no tenia ninguna pk la tabla exp.Lo que pasa que solo llene la tabla con los datos y pense q una vez que estuvieran todos ordenarlos y colocarles su numero que les correspondia.

Es por eso que cree un nuevo campo "num" lo cual esta vacío.

Ya que estuviera echo todo "num" seria la pk de la tabla,espero que tenga una solucion mi enredo.
ya encontre una forma de hacerlo pero ahora cuando quiero ordenarlos mediante la cedula y un campo llamado tip (tipo) no lo puedo hacer, mira pasa esto

SELECT *
FROM exp
ORDER BY ced ASC , tip ASC
resulta esto:
cedula------------tip

HECD501023 --60 MADRE
HECD501223 --10 TRABAJADOR
HECD501223 --30 ESPOSA
HECE740923 --20 TRABAJADORA
HECE740923 --80 HIJA

y lo que quiero es esto
HECD501223 --10 TRABAJADOR
HECD501223 --30 ESPOSA
HECD501223 --60 MADRE
HECE740923 --20 TRABAJADORA
HECE740923 --80 HIJA

Probe las consultas por separado (SELECT * FROM exp ORDER BY ced ASC ) y (SELECT * FROM exp ORDER BY tip ASC ) y si ordena "tip" como debiera.

Que estara mal en la consulta o que me faltara, te agradeceria mucho si em ayudas
  #13 (permalink)  
Antiguo 25/03/2013, 14:47
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 17 años
Puntos: 2658
Respuesta: problema con enumeracion repetida

Cita:
HECD501023 --60 MADRE
HECD501223 --60 MADRE
Los datos son diferentes.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #14 (permalink)  
Antiguo 25/03/2013, 15:17
 
Fecha de Ingreso: febrero-2013
Mensajes: 26
Antigüedad: 11 años, 10 meses
Puntos: 0
Respuesta: problema con enumeracion repetida

Cita:
Iniciado por gnzsoloyo Ver Mensaje
Los datos son diferentes.
Si es lo que me di cuenta, por tantos registros ya me mareo.Pero ya lo solucione muchas gracias por la ayuda.
  #15 (permalink)  
Antiguo 26/03/2013, 06:06
Avatar de gerardo_goh  
Fecha de Ingreso: noviembre-2008
Mensajes: 107
Antigüedad: 16 años, 1 mes
Puntos: 1
Respuesta: problema con enumeracion repetida

puedes poner la solucion para que otros lo puedan, esa es la regla comparte solucion. saludos!!!

Etiquetas: campo, registros, repetida, select
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 23:50.