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

Comprobar registros de varias tablas

Estas en el tema de Comprobar registros de varias tablas en el foro de Bases de Datos General en Foros del Web. Les quisiera pedir ayuda en un problema que tengo, que es el siguiente: tengo 4 tablas en una base de datos, llamadas asi : prepago, ...
  #1 (permalink)  
Antiguo 18/06/2015, 10:36
 
Fecha de Ingreso: junio-2015
Mensajes: 30
Antigüedad: 9 años, 5 meses
Puntos: 1
Pregunta Comprobar registros de varias tablas

Les quisiera pedir ayuda en un problema que tengo, que es el siguiente:
tengo 4 tablas en una base de datos, llamadas asi : prepago, altas, fraudes, portabilidad.

quiero hacer una consulta de la tabla prepago donde tiene 4 campos con su respectivos datos y el campo con el que quiero tarbajar seria el campo numero de esta tabla prepago, quiero comparar si ese numero existe en las otras 3 tablas y si asi fuera me muestre una cadena de texo: el ejemplo seria asi:

tabla prepago

nombre numero estado
juan 123456 (aqui seria donde iria: alta, fraudes, portabilidad dependiendo del resultado)

comprobar si el numero de juan esta en una de estas 3 tablas:

tabla altas
id numero
1 133455

tabla fraudes
id numero
1 123456

tabla portabilidad
id numero
1 4659066

si esta que me muestre una cadena de texto de acuerdo en que tabla esta: que muestre alta, fraude o portabilidad.

ES POSIBLE O NO ES POSIBLE? POR DONDE EMPIEZO?

Última edición por criscc19; 18/06/2015 a las 10:50
  #2 (permalink)  
Antiguo 19/06/2015, 13:14
Avatar de Triby
Mod on free time
 
Fecha de Ingreso: agosto-2008
Ubicación: $MX->Gto['León'];
Mensajes: 10.106
Antigüedad: 16 años, 3 meses
Puntos: 2237
Respuesta: Comprobar registros de varias tablas

Tu problema no es PHP sino base de datos; muevo el tema al área correspondiente.
__________________
- León, Guanajuato
- GV-Foto
  #3 (permalink)  
Antiguo 19/06/2015, 13:29
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: Comprobar registros de varias tablas

La forma más simple es hacer un UNION, que te permitirá ver dónde aparece:
Código SQL:
Ver original
  1. SELECT numero, 'Altas' Estado
  2. FROM prepago P INNER JOIN altas A ON P.numero = A.numero
  3. WHERE A.numero = 123456
  4. UNION
  5. SELECT numero, 'Fraude' Estado
  6. FROM prepago P INNER JOIN fraudes F ON P.numero = F.numero
  7. WHERE F.numero = 123456
  8. UNION
  9. SELECT numero, 'Portabilidad' Estado
  10. FROM prepago P INNER JOIN portabilidad PO ON P.numero = PO.numero
  11. WHERE PO.numero = 123456
Por supuesto, esto solo sirve si el numero puede estar en una sola de las otras tres tablas. En caso de poder aparecer en más de una en diferentes momentos del tiempo, habría que agregar las condiciones de exclusion que permitan saber cuál es el estado valido actual.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #4 (permalink)  
Antiguo 19/06/2015, 14:40
 
Fecha de Ingreso: junio-2015
Mensajes: 30
Antigüedad: 9 años, 5 meses
Puntos: 1
Respuesta: Comprobar registros de varias tablas

Gracias por responde, pero creo que lo solucione, y con PHP, lo sulucione asi aver si me dicen si es valido:

cree una consulta de cada tabla que tiene los numeros, luego los guarde en un array
luego, un codigo que busque el numero dentro del array, que deberia ser 3 array, con un if compare el numero de prepago en las tres tablas y dependiendo en cual de ellas este me muestre un echo alta, fraude, portabilidad
  #5 (permalink)  
Antiguo 19/06/2015, 16:48
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: Comprobar registros de varias tablas

Es lo que se llama "fuerza bruta"...
¿Para que hacer tantas consultas, cuando con una sola logras lo mismo?
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #6 (permalink)  
Antiguo 19/06/2015, 17:13
 
Fecha de Ingreso: junio-2015
Mensajes: 30
Antigüedad: 9 años, 5 meses
Puntos: 1
Respuesta: Comprobar registros de varias tablas

tenes razon pero por algo pedi ayuda, la verdad que yo no tengo ni idea como optimizar el codigo, el codigo que escribiste la verdad que no le entiendo muy bien
  #7 (permalink)  
Antiguo 19/06/2015, 19:42
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: Comprobar registros de varias tablas

OK. No lo entiendes, ¿lo probaste?
Es lo primero. Las explicaciones vienen después.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #8 (permalink)  
Antiguo 20/06/2015, 00:52
 
Fecha de Ingreso: junio-2015
Mensajes: 30
Antigüedad: 9 años, 5 meses
Puntos: 1
Respuesta: Comprobar registros de varias tablas

Como lo voy a probar si no lo entiendo? solo se que seguramente creaste una conexicon entre las tablas, pero con que objetivo? cual es resultado de esos SELCT, porque tomas en cuenta el campo estado? si en ese capo cuando muestre los datos dinamicamente es donde debe mostrarme el resultado de lo que quiero
  #9 (permalink)  
Antiguo 20/06/2015, 04:58
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: Comprobar registros de varias tablas

Lo pruebas copiando al sentencia y ejecutando en MySQL sin usar PHP, por ejemplo usando el phpMyadmin.wque para eso existe.
Las sentencias de SQL nunca se prueban en un lenguaje de programación en la etapa de desarrollo. Se hacen directamente en la base de datos y luego se las traslada al programa.
Hazlo.

Por otro lado, Para entender la lógica de la consulta sólo debes leer un manual básico de SQL, porque no estoy inventando nada.

Vamos a ver si se entiende la idea.
Primero creamos y cargamos las tablas que imagino tienes:

Código MySQL:
Ver original
  1. mysql> DROP TABLE IF EXISTS PREPAGO;
  2. Query OK, 0 rows affected (0.00 sec)
  3.  
  4. mysql> DROP TABLE IF EXISTS ALTAS;
  5. Query OK, 0 rows affected (0.05 sec)
  6.  
  7. mysql> DROP TABLE IF EXISTS FRAUDE;
  8. Query OK, 0 rows affected (0.00 sec)
  9.  
  10. mysql> DROP TABLE IF EXISTS PORTABILIDAD;
  11. Query OK, 0 rows affected (0.00 sec)
  12.  
  13. mysql> CREATE TABLE PREPAGO (
  14.     ->     NUMERO INT UNSIGNED PRIMARY KEY,
  15.     ->     FECHA_ALTA DATE NOT NULL
  16.     -> );
  17. Query OK, 0 rows affected (0.04 sec)
  18.  
  19. mysql> CREATE TABLE ALTAS (
  20.     ->     NUMERO INT UNSIGNED PRIMARY KEY,
  21.     ->     FECHA_ALTA DATE NOT NULL
  22.     -> );
  23. Query OK, 0 rows affected (0.05 sec)
  24.  
  25. mysql> CREATE TABLE FRAUDE (
  26.     ->     NUMERO INT UNSIGNED PRIMARY KEY,
  27.     ->     FECHA_ALTA DATE NOT NULL
  28.     -> );
  29. Query OK, 0 rows affected (0.01 sec)
  30.  
  31. mysql> CREATE TABLE PORTABILIDAD (
  32.     ->     NUMERO INT UNSIGNED PRIMARY KEY,
  33.     ->     FECHA_ALTA DATE NOT NULL
  34.     -> );
  35. Query OK, 0 rows affected (0.05 sec)
  36. mysql> INSERT INTO PREPAGO VALUES (123456, '2015-03-25');
  37. Query OK, 1 row affected (0.00 sec)
  38.  
  39. mysql> INSERT INTO ALTAS VALUES (123456, '2015-04-11');
  40. Query OK, 1 row affected (0.00 sec)
  41.  
  42. mysql> INSERT INTO FRAUDE VALUES (123456, '2015-04-30');
  43. Query OK, 1 row affected (0.00 sec)
  44.  
  45. mysql> INSERT INTO PORTABILIDAD VALUES (123456, '2015-06-03');
  46. Query OK, 1 row affected (0.00 sec)
Luego realizamos una consulta solo para verificar lo que coincide entre cada par de tablas:
Código MySQL:
Ver original
  1. mysql> SELECT A.numero, 'Altas' Estado, A.fecha_alta
  2.     -> FROM prepago P INNER JOIN altas A ON P.numero = A.numero
  3.     -> WHERE A.numero = 123456
  4.     -> UNION
  5.     -> SELECT F.numero, 'Fraude' Estado, F.fecha_alta
  6.     -> FROM prepago P INNER JOIN fraude F ON P.numero = F.numero
  7.     -> WHERE F.numero = 123456
  8.     -> UNION
  9.     -> SELECT PO.numero, 'Portabilidad' Estado, PO.fecha_alta
  10.     -> FROM prepago P INNER JOIN portabilidad PO ON P.numero = PO.numero
  11.     -> WHERE PO.numero = 123456;
  12.  
  13. +--------+--------------+------------+
  14. | numero | Estado       | fecha_alta |
  15. +--------+--------------+------------+
  16. | 123456 | Altas        | 2015-04-11 |
  17. | 123456 | Fraude       | 2015-04-30 |
  18. | 123456 | Portabilidad | 2015-06-03 |
  19. +--------+--------------+------------+
  20. 3 rows in set (0.00 sec)
Luego, quiero averiguar solo cual es el ultimo estado:
Código MySQL:
Ver original
  1. mysql> SELECT numero, estado, fecha_alta fecha
  2.     -> FROM (
  3.     ->  SELECT  A.numero, 'Altas' Estado, A.fecha_alta
  4.     ->  FROM prepago P INNER JOIN altas A ON P.numero = A.numero
  5.     ->  WHERE A.numero = 123456
  6.     ->  UNION
  7.     ->  SELECT F.numero, 'Fraude' Estado, F.fecha_alta
  8.     ->  FROM prepago P INNER JOIN fraude F ON P.numero = F.numero
  9.     ->  WHERE F.numero = 123456
  10.     ->  UNION
  11.     ->  SELECT PO.numero, 'Portabilidad' Estado, PO.fecha_alta
  12.     ->  FROM prepago P INNER JOIN portabilidad PO ON P.numero = PO.numero
  13.     ->  WHERE PO.numero = 123456) T1
  14.     -> ORDER BY fecha_alta DESC
  15.     -> LIMIT 1;
  16. +--------+--------------+------------+
  17. | numero | estado       | fecha      |
  18. +--------+--------------+------------+
  19. | 123456 | Portabilidad | 2015-06-03 |
  20. +--------+--------------+------------+
  21. 1 row in set (0.00 sec)

Todo esto es SQL bastante básico. Es de manual.


Ahora bien, supongamos que en lugar de tener los datos en las cuatro tablas, solo está la maestra (PREPAGO), y la de fraude.
Código MySQL:
Ver original
  1. DROP TABLE IF EXISTS PREPAGO;
  2. DROP TABLE IF EXISTS PORTABILIDAD;
  3.  
  4. CREATE TABLE PREPAGO (
  5.     NUMERO INT UNSIGNED PRIMARY KEY,
  6.     FECHA_ALTA DATE NOT NULL
  7. );
  8.  
  9. CREATE TABLE ALTAS (
  10.     NUMERO INT UNSIGNED PRIMARY KEY,
  11.     FECHA_ALTA DATE NOT NULL
  12. );
  13.  
  14. CREATE TABLE FRAUDE (
  15.     NUMERO INT UNSIGNED PRIMARY KEY,
  16.     FECHA_ALTA DATE NOT NULL
  17. );
  18.  
  19. CREATE TABLE PORTABILIDAD (
  20.     NUMERO INT UNSIGNED PRIMARY KEY,
  21.     FECHA_ALTA DATE NOT NULL
  22. );
  23. INSERT INTO PREPAGO VALUES (123456, '2015-03-25');
  24. INSERT INTO FRAUDE VALUES (123456, '2015-04-30');
Entonces la consulta simple ya devuelve lo necesario:

Código MySQL:
Ver original
  1. mysql> SELECT  A.numero, 'Altas' Estado, A.fecha_alta
  2.     -> FROM prepago P INNER JOIN altas A ON P.numero = A.numero
  3.     -> WHERE A.numero = 123456
  4.     -> UNION
  5.     -> SELECT F.numero, 'Fraude' Estado, F.fecha_alta
  6.     -> FROM prepago P INNER JOIN fraude F ON P.numero = F.numero
  7.     -> WHERE F.numero = 123456
  8.     -> UNION
  9.     -> SELECT PO.numero, 'Portabilidad' Estado, PO.fecha_alta
  10.     -> FROM prepago P INNER JOIN portabilidad PO ON P.numero = PO.numero
  11.     -> WHERE PO.numero = 123456;
  12. +--------+--------+------------+
  13. | numero | Estado | fecha_alta |
  14. +--------+--------+------------+
  15. | 123456 | Fraude | 2015-04-30 |
  16. +--------+--------+------------+
  17. 1 row in set (0.00 sec)

El comportamiento de las consultas depende de como se contruyan los datos, y como la realcies.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)

Última edición por gnzsoloyo; 20/06/2015 a las 11:11
  #10 (permalink)  
Antiguo 20/06/2015, 14:25
 
Fecha de Ingreso: junio-2015
Mensajes: 30
Antigüedad: 9 años, 5 meses
Puntos: 1
Respuesta: Comprobar registros de varias tablas

espera te dare un pondre el codigo que use para que me entiendas, porque la verdad no me sirve eso que haces, porque yo lo que quiero mostarar en la web es solo la tabla prepago, que tiene los registros nombre - numero- estado, don estado es la casilla donde debe mostrarme depende de la comparacion de los registros de numero con los demas numeros de las demas tablas, te pondre el codigo para que veas

Última edición por criscc19; 20/06/2015 a las 14:32
  #11 (permalink)  
Antiguo 20/06/2015, 14:43
 
Fecha de Ingreso: junio-2015
Mensajes: 30
Antigüedad: 9 años, 5 meses
Puntos: 1
Respuesta: Comprobar registros de varias tablas

Cita:
Editado: Código de programación no permitido en foros de Bases de Datos.
Leer las normas del foro, por favor.

Última edición por gnzsoloyo; 20/06/2015 a las 15:57
  #12 (permalink)  
Antiguo 20/06/2015, 14:45
 
Fecha de Ingreso: junio-2015
Mensajes: 30
Antigüedad: 9 años, 5 meses
Puntos: 1
Respuesta: Comprobar registros de varias tablas

aqui introdusco en un array los numeros de las tablas, altas, fraudes, portabilidad

Cita:
Editado: Código de programación no permitido en foros de Bases de Datos.
Leer las normas del foro, por favor.

Última edición por gnzsoloyo; 20/06/2015 a las 15:55
  #13 (permalink)  
Antiguo 20/06/2015, 14:48
 
Fecha de Ingreso: junio-2015
Mensajes: 30
Antigüedad: 9 años, 5 meses
Puntos: 1
Respuesta: Comprobar registros de varias tablas

Genero una tabla dinamica que mostrara la tabla prepago
y en el campo Estado, buscara en los array el numero y si esta mostrara en texto que ves en el codigo

Cita:
Editado: Código de programación no permitido en foros de Bases de Datos.
Leer las normas del foro, por favor.
dime, esta bien esto? se puede optimisar?
las tablas son alimentadas cosntante mente por eso debo verificar dinamicamente, si el numero de la tabla prepago, existe en las otras 3 tablas

Última edición por gnzsoloyo; 20/06/2015 a las 15:55
  #14 (permalink)  
Antiguo 20/06/2015, 15:56
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: Comprobar registros de varias tablas

@criscc19: No se tratan ni resuelven temas de programación en los foros de BBDD. Sólo SQL y amdinistracion de BBDD.

Lee las reglas del foro, por favor.

Lo que hagas en PHP es irrelevante para las consultas, y de todos modos es MUY ineficiente hacer tres consultas para obtener los mismos resultados que puedes lograr en una sola.

¿Intentaste adaptar lo que te propuse a tu esquema de tabas?
¿Intentaste, aunque sea mínimamente, probar la logica en el phpMyadmin, como te sugerí?

Cita:
Iniciado por criscc19 Ver Mensaje
[...], porque la verdad no me sirve eso que haces, porque yo lo que quiero mostarar en la web es solo la tabla prepago, que tiene los registros nombre - numero- estado, don estado es la casilla donde debe mostrarme depende de la comparacion de los registros de numero con los demas numeros de las demas tablas, te pondre el codigo para que veas
Eso que dices es exactamente lo que te mostré, en base a una forma de lograrlo. No es la única, pero es una muy simple.
Si no puedes entenderlo, es un problema que se resuelve leyendo y practicando.
¿QUé parte de lo que te propuse no entiendes?
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #15 (permalink)  
Antiguo 30/06/2015, 12:22
 
Fecha de Ingreso: junio-2015
Ubicación: Bogota
Mensajes: 18
Antigüedad: 9 años, 4 meses
Puntos: 0
Respuesta: Comprobar registros de varias tablas

Vamos a ver... tres preguntas:

- Que Motor de base de datos estas usando
- Cual es la idea de la consulta que quieres hacer (presumo que es para actualizar el campo Estado, pero me puedo equivocar).
- Como se va a disparar la consulta (Desde la aplicación o desde la base de datos?)

Porque se me ocurre un procedimiento almacenado que inicie una secuencia de consultas condicionales pero primero habria que aclarar esos tres punticos... Para mi...

Etiquetas: consulta-mysql, php
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 09:21.