Ver Mensaje Individual
  #4 (permalink)  
Antiguo 17/12/2014, 06:28
Avatar de gnzsoloyo
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)