Foros del Web » Programando para Internet » PHP »

[SOLUCIONADO] Comparar tablas

Estas en el tema de Comparar tablas en el foro de PHP en Foros del Web. Hola. Tengo una tabla maestra y una tabla auxiliar con la siguiente estructura: CODIGO/NOMBRE La tabla maestra guarda todos los códigos existentes. La tabla auxiliar ...
  #1 (permalink)  
Antiguo 16/12/2014, 14:17
Avatar de bandolera  
Fecha de Ingreso: abril-2009
Mensajes: 613
Antigüedad: 15 años
Puntos: 7
Pregunta Comparar tablas

Hola.
Tengo una tabla maestra y una tabla auxiliar con la siguiente estructura:
CODIGO/NOMBRE

La tabla maestra guarda todos los códigos existentes.
La tabla auxiliar contiene códigos ya existentes en tabla maestra y códigos nuevos que deben ser agregados a la tabla maestra.
Cómo hago una rutina para verificar que los códigos en la tabla auxiliar existan en la tabla maestra. Y si hay un código nuevo lo agregue de la tabla auxiliar a la tabla maestra?
GRacias.
__________________
Todos somos iguales. NO! a la violencia de género.
  #2 (permalink)  
Antiguo 16/12/2014, 17:13
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 16 años, 5 meses
Puntos: 2658
Respuesta: Comparar tablas

¿Son tablas visuales en la pagina web, o son tablas de la BBDD?
__________________
¿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 17/12/2014, 05:20
Avatar de loncho_rojas
Colaborador
 
Fecha de Ingreso: octubre-2008
Ubicación: En el mejor lugar del mundo
Mensajes: 2.704
Antigüedad: 15 años, 6 meses
Puntos: 175
Respuesta: Comparar tablas

Hola mi estimado Teemo.

Podrías mientras explicas mejor tu problema, mirar en guguel acerca de "TABLAS RELACIONADAS MYSQL".. de paso lees algo de FOREING KEY EN MYSQL... la función de un FOREING KEY es que en la tabla PAPÁ solo puedan insertarse los HIJOS que son para él, o sea.. que en una tabla de usuarios solo puedas insertar ciudades que existan en la tabla CIUDADES y no otras...

Si lo que buscas es hacerlo en PHP, pues para eso son las claves foráneas.
__________________
Ayudo con lo que puedo en el foro, y solo en el foro.. NO MENSAJES PRIVADOS.. NO EMAILS NI SKYPE u OTROS.

Antes de hacer un TOPICO piensa si puedes hallarlo en Google o en el Buscador del Foro...
  #4 (permalink)  
Antiguo 17/12/2014, 06:28
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 16 años, 5 meses
Puntos: 2658
Respuesta: Comparar tablas

A nivel de BBDD hay más de una forma de hacerlo:
1) Si los datos posibles para agregar llevan el dto usado como PK, simplemente haces un
Código SQL:
Ver original
  1. INSERT IGNORE INTO tablaMaestra(campos)
  2. SELECT valores
  3. FROM tablaHija;
El IGNORE hace que se ingresen todos los registros cuyo valor de PK no existan ya en la tabla destino (la maestra), sin disparar un error de clave duplicada. Las duplicidades simplemente no se insertan.

2) Si la tabla origen (hija) no tiene el campo pk, pero sí otros valores que no se deben duplicar, lo que haces es procesarlo en dos consultas seguidas dentro de la misma conexión (esto es importante) y sin cerrarla. Es decir: Son dos sentencias SQL consecutirvas sin cerrar conexion a MySQL:
Código SQL:
Ver original
  1. CREATE TEMPORARY TABLE tablatemp
  2. AS
  3. SELECT T2.*
  4. FROM tablaHija
  5. WHERE (campo1, campo2, ...) NOT IN (SELECT campo1, campo2, ... FROM TablaMaestra);
Código SQL:
Ver original
  1. INSERT INTO tablaMaestra(Campo1, campo2, ...)
  2. SELECT *
  3. FROM tablatemp;
"(campo1, campo2, ...)" representa el conjunto de campos (uno o más de uno) que contienen en la tabla origen los valores que pueden ya existir en la tabla maestra. Al ponerlos entre paréntesis haces que MySQL los compare como conjunto único contra cada registro devuelto por la subconsulta (que debe tener la misma cantidad de campos y en el mismo orden).
El CREATE TEMPORARY TABLE crea una tabla temporal que desaparece cuando se cierre la conexión (por eso se debe hacer sobre la misma) y almacenaría los registros de la tabla origen que NO existan en la Maestra.
Luego de eso es un simple INSERT, donde debes indicar los campos a ingresar uno a uno y en el mismo orden de la tabla temporal creada.

¿Se entiende?

La solución dependerá de lo que quieras hacer y lo que tengas, pero no nos estas dando datos como para confirmar cuál te conviene.

Nota: Obviamente esta solucion sólo palica a BBDD, no PHP. Para PHP es irrelevante mas alla de la llamada a ejecutar las queries.
__________________
¿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 17/12/2014, 10:20
Avatar de bandolera  
Fecha de Ingreso: abril-2009
Mensajes: 613
Antigüedad: 15 años
Puntos: 7
Pregunta Respuesta: Comparar tablas

Hola chicos.
Quiero hacer un proceso en php que haga el proceso al precionar un botón.
Cada tabla tiene al campo CODIGO como PK. Y no están relacionadas porque la tabla auxiliar alimenta a la tabla maestra.
Tabla Maestra:
CODIGO/NOMBRE
100/RAUL
101/CLAUDIA
102/MIGUEL
103/SOFIA

Tabla Auxiliar:
CODIGO/NOMBRE
100/RAUL
102/RAMON
106/LUIS
107/ROSA

Paso 1: Verificar que los códigos de T.Auxiliar existan en T.Maestra.
Paso 2: Identificar registros nuevos.
Paso 3: Agregar registros nuevos a T.Maestra.

En el ejemplo de las tablas: los códigos 106 y 107 de la T.Auxiliar no existe en T.Maestra.
Por lo tanto hay que agregarlas a T.Maestra.
Al final quedaría así la T.Maestra:
Tabla Maestra:
CODIGO/NOMBRE
100/RAUL
101/CLAUDIA
102/MIGUEL
103/SOFIA
106/LUIS
107/ROSA

Y la tabla auxliar se elimina.
Ahora. Sí.
__________________
Todos somos iguales. NO! a la violencia de género.
  #6 (permalink)  
Antiguo 17/12/2014, 11:24
Avatar de loncho_rojas
Colaborador
 
Fecha de Ingreso: octubre-2008
Ubicación: En el mejor lugar del mundo
Mensajes: 2.704
Antigüedad: 15 años, 6 meses
Puntos: 175
Respuesta: Comparar tablas

Interesante, deberías empezar a programarlo a ver que tal queda...
__________________
Ayudo con lo que puedo en el foro, y solo en el foro.. NO MENSAJES PRIVADOS.. NO EMAILS NI SKYPE u OTROS.

Antes de hacer un TOPICO piensa si puedes hallarlo en Google o en el Buscador del Foro...
  #7 (permalink)  
Antiguo 02/01/2015, 16:52
Avatar de bandolera  
Fecha de Ingreso: abril-2009
Mensajes: 613
Antigüedad: 15 años
Puntos: 7
Pregunta Respuesta: Comparar tablas

hola chicos esta sentencia en MySQL:
Código PHP:
update sc_cliente
set    fec_ult_movimiento
='2014-11-30',
    
id_estado '1'
where cod_clie in (select from sc_ctacte where `fecha_mov_cta` = '2014-11-30' and `id_transaccion`= '1'
Me bota el siguiente error:
Código HTML:
 #1241 - Operand should contain 1 column(s)
Qué está mal?
__________________
Todos somos iguales. NO! a la violencia de género.
  #8 (permalink)  
Antiguo 02/01/2015, 16:56
Avatar de tomerqueves  
Fecha de Ingreso: marzo-2005
Ubicación: algeciras (cadiz)
Mensajes: 200
Antigüedad: 19 años, 1 mes
Puntos: 7
Respuesta: Comparar tablas

update sc_cliente
set fec_ult_movimiento='2014-11-30' AND
id_estado = '1'
where cod_clie in (select * from sc_ctacte where `fecha_mov_cta` = '2014-11-30' and `id_transaccion`= '1')
__________________
A todos los moderadores y admiinistradores. Si algun día me banean, por favor devolverme la carita de mi avatar
  #9 (permalink)  
Antiguo 02/01/2015, 17:14
Avatar de bandolera  
Fecha de Ingreso: abril-2009
Mensajes: 613
Antigüedad: 15 años
Puntos: 7
De acuerdo Respuesta: Comparar tablas

Cita:
Iniciado por tomerqueves Ver Mensaje
update sc_cliente
set fec_ult_movimiento='2014-11-30' AND
id_estado = '1'
where cod_clie in (select * from sc_ctacte where `fecha_mov_cta` = '2014-11-30' and `id_transaccion`= '1')
Gracias, pero justo antes de leer tu post hice pruebas y lo único que modifiqué fue que en el select del parentesis le puse :
Código HTML:
select cod_clie from ....
.
__________________
Todos somos iguales. NO! a la violencia de género.

Etiquetas: tabla, tablas
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 15:00.