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

Crear un contador e insertarlo en la tabla

Estas en el tema de Crear un contador e insertarlo en la tabla en el foro de Mysql en Foros del Web. Saludos a todos que lean este mensaje, Soy nuevo en el foro y es mi primera pregunta. Se me encargo modificar una base de datos ...
  #1 (permalink)  
Antiguo 07/12/2011, 14:26
 
Fecha de Ingreso: diciembre-2011
Mensajes: 7
Antigüedad: 12 años, 4 meses
Puntos: 0
Pregunta Crear un contador e insertarlo en la tabla

Saludos a todos que lean este mensaje,

Soy nuevo en el foro y es mi primera pregunta.
Se me encargo modificar una base de datos Mysql en la cual tenia dos tablas diferentes llamadas pacientes y tenia que meterla en una sola en la cual solo tengo que meter el nombre y el id del paciente.

Al realizar las consultas me di cuenta que habia muchos registros repetidos en id pero con nombre diferente asi es que quite la llave primaria a la tabla y los inserte en una nueva con la idea de crear un contador y esa cuenta meterla como id.

No he podido generar la cuenta y mucho menos la insercion, si alguien me puede ayudar a realizar esto le estare muy agradecido. Les dejo la estructura de mis tablas

---------Tabla origen donde se encuentran los duplicados
CREATE TABLE `pacientes` (
`id_paciente` int(4) NOT NULL auto_increment,
`nombre` varchar(50) collate latin1_general_ci default NULL,
`id_trato` int(2) default NULL,
`sexo` char(1) collate latin1_general_ci default NULL,
`fecha_nacimiento` datetime default NULL,
`id_estado_civil` int(2) default NULL,
`calle_no` varchar(50) collate latin1_general_ci default NULL,
`colonia` varchar(25) collate latin1_general_ci default NULL,
`del_mun` varchar(30) collate latin1_general_ci default NULL,
`id_estado` int(2) default NULL,
`cp` varchar(5) collate latin1_general_ci default NULL,
`tel_casa` varchar(25) collate latin1_general_ci default NULL,
`tel_trabajo` varchar(10) collate latin1_general_ci default NULL,
`ext_tel_trabajo` varchar(4) collate latin1_general_ci default NULL,
`tel_fax` varchar(10) collate latin1_general_ci default NULL,
`tel_cel` varchar(13) collate latin1_general_ci default NULL,
`tel_biper` varchar(10) collate latin1_general_ci default NULL,
`clave_biper` varchar(6) collate latin1_general_ci default NULL,
`correo` varchar(50) collate latin1_general_ci default NULL,
`representante` varchar(50) collate latin1_general_ci default NULL,
`no_expediente` varchar(20) collate latin1_general_ci NOT NULL default '',
`notas` mediumtext collate latin1_general_ci,
PRIMARY KEY (`id_paciente`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1 COLLATE=latin1_general_ci;


-------------Tabla destino
CREATE TABLE `uro_paciente` (
`uro_id_paciente` int(11) NOT NULL AUTO_INCREMENT,
`pa_nombre` varchar(45) NOT NULL,
`pa_edad` decimal(2,0) DEFAULT NULL,
`pa_sexo` varchar(10) DEFAULT NULL,
`pa_telefono` varchar(45) DEFAULT NULL,
`pa_celular` varchar(45) DEFAULT NULL,
`pa_fec_nac` date DEFAULT NULL,
`pa_correo` varchar(45) DEFAULT NULL,
PRIMARY KEY (`uro_id_paciente`)
) ENGINE=InnoDB AUTO_INCREMENT=18 DEFAULT CHARSET=latin1;

Y aprovechando como insertar nadamas en la tabla destino solo el nombre y el id del paciente. Se que pido mucho amigos pero por favor llevo varios dias con esto y no encuentro respuesta. Gracias de antemano
  #2 (permalink)  
Antiguo 07/12/2011, 15:01
 
Fecha de Ingreso: abril-2011
Ubicación: Lima
Mensajes: 39
Antigüedad: 13 años
Puntos: 4
Respuesta: Crear un contador e insertarlo en la tabla

Hola amigo, primero te recomiendo leer un poco sobre SQL o MySQL, pues la verdad es algo complejo lo que pides, lo es para mi; sin embargo, se me ocurre algo como esto: con alguna herramienta de programación o quizá con el mismo MySQL ejecuta un procedimiento almacenado que realize el conteo y la insercción, te paso parte de mi codigo para el contador y creo que le puedes agregar un insert, no te desarrollaré todo el codigo pero al menos para que te des una idea:

Código:
CREATE DEFINER=`root`@`localhost` PROCEDURE `InsertPaci`( )
BEGIN

DECLARE Corre int;

SET Corre=((SELECT uro_ipPaciente 
FROM documento uropaciente ORDER BY uro_idpaciente DESC limit 0,1 )+1);
        
if corre is null then 
   set corre=1;
end if;
        
        INSERT INTO uropaciente(aqui especifica los campos que quieres llenar) FROM pacientes (aqui especifica los campos a copiar de la tabla grande);
        
END
bien, de hecho el codigo tiene errores asi que lee sobre SQL, púlelo y ejecutalo a ver que tal, espero haber ayudado.
  #3 (permalink)  
Antiguo 13/12/2011, 06:05
Colaborador
 
Fecha de Ingreso: marzo-2008
Ubicación: Sabadell
Mensajes: 4.897
Antigüedad: 16 años, 1 mes
Puntos: 574
Respuesta: Crear un contador e insertarlo en la tabla

Cita:
---------Tabla origen donde se encuentran los duplicados
CREATE TABLE `pacientes` (
`id_paciente` int(4) NOT NULL auto_increment,
...
PRIMARY KEY (`id_paciente`)

Ese campo tiene duplicados!!?!?!? Imposible.

Yo quitaria pa_edad es un dato que ya tienes en pa_fec_na, que es fijo, mientras que edad no lo es....


Código MySQL:
Ver original
  1. INSERT INTO `uro_paciente` (`pa_nombre`,
  2.               `pa_sexo`,
  3.               `pa_telefono`,
  4.               `pa_celular`,
  5.               `pa_fec_nac`,
  6.               `pa_correo`)
  7. SELECT DISTINCT `nombre`,
  8.              `sexo`,
  9.              `tel_casa`,
  10.              `tel_cel`,
  11.              `fecha_nacimiento`,
  12.              `correo`
  13. FROM `pacientes`
  14. GROUP BY `nombre`,
  15.                  `sexo`,
  16.                  `tel_casa`,
  17.                  `tel_cel`,
  18.                  `fecha_nacimiento`,
  19.                  `correo`;

Con esto la tabla uro_paciente tendrá un `uro_id_paciente` sin duplicados, ni saltos (mientras no borres a nadie).


DISTINCT eliminara repeticiones, pero si el mismo paciente lo tienes dos veces en la tabla paciente con por ejemplo telefonos distintos te enetrará dos veces....

Que tengas pacientes duplicados con identificadores distintos es creible, que un campo autoincremental que ademas es PRIMARY KEY tenga duplicados no lo es....

No te procupes por los saltos, un identificador no es ni debe ser un contador...

HAAA y no repitas los post!!!!
__________________
Quim
--------------------------------------------------
Ayudar a ayudar es una buena práctica!!! Y da buenos resultados.

Última edición por quimfv; 13/12/2011 a las 06:33
  #4 (permalink)  
Antiguo 14/12/2011, 22:30
 
Fecha de Ingreso: diciembre-2011
Mensajes: 7
Antigüedad: 12 años, 4 meses
Puntos: 0
De acuerdo Respuesta: Crear un contador e insertarlo en la tabla

Hola amigos antes que nada gracias por su tiempo y respuestas y prometo no volver a repetir jeje.

Les comento en efecto tenias razon me complique mucho por algo que no tenia mayor lio gracias por la respuesta

Para josemendozar cheque el codigo y me quedo asi:

drop procedure if exists insertPaci;
DELIMITER //
CREATE PROCEDURE insertPaci( )
BEGIN
declare corre int;

set corre=(SELECT id_paciente
FROM uro_lap.pacientes
ORDER BY id_paciente +1
);

if corre= null then
set corre=1;
END if;


END//
;
DELIMITER ;


Este codigo es util para ordenar a lo mejor a alguien mas le puede servir.

Para quimfv gracias a tu explicacion despejaste muchas dudas que tenia, tienes razon con solo insertar esos datos no hubo mayor problema en la tabla destino eso me tenia muy confundido por eso lo del contador me preocupe de mas pero he aprendido mucho. Les agradesco y nos estamos leyendo por el foro

Etiquetas: tabla
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 20:47.