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

comparar registros entre dos tablas

Estas en el tema de comparar registros entre dos tablas en el foro de Mysql en Foros del Web. Hola Estoy haciendo una base de datos para una escuela el problema que tengo se encuentra en los pagos mensuales que se realizan pues debo ...
  #1 (permalink)  
Antiguo 05/04/2010, 14:21
 
Fecha de Ingreso: noviembre-2009
Mensajes: 23
Antigüedad: 14 años, 5 meses
Puntos: 0
Busqueda comparar registros entre dos tablas

Hola

Estoy haciendo una base de datos para una escuela el problema que tengo se encuentra en los pagos mensuales que se realizan pues debo poder consultar los alumnos que ya pagaron el mes y los que no.

Solo puedo consultar los que ya pagaron por que los guarda en mi tabla pago

id_pago
fecha
observaciones
id_alumnos
id_clase
id_mes
Pero los que no han pagado como los consulto? si no estan en la tabla pago pero en mi tabla grupo si se encuentran guadado solo los alumnos y sus respectivas clases.

A grandes rasgos necesito saber quienes pagaron tal mes y quienes no.

De antemano Gracias
  #2 (permalink)  
Antiguo 05/04/2010, 14:24
Avatar de abimaelrc
Colaborador
 
Fecha de Ingreso: mayo-2009
Ubicación: En el planeta de Puerto Rico
Mensajes: 14.734
Antigüedad: 15 años
Puntos: 1517
Respuesta: comparar registros entre dos tablas

Espera que un moderador te mueva al foro de base de datos para que te puedan indicar la mejor forma de lograr hacer lo que pides en la consulta.
__________________
Verifica antes de preguntar.
Los verdaderos amigos se hieren con la verdad, para no perderlos con la mentira. - Eugenio Maria de Hostos
  #3 (permalink)  
Antiguo 05/04/2010, 14:29
 
Fecha de Ingreso: noviembre-2009
Mensajes: 23
Antigüedad: 14 años, 5 meses
Puntos: 0
Respuesta: comparar registros entre dos tablas

Cita:
Iniciado por abimaelrc Ver Mensaje
Espera que un moderador te mueva al foro de base de datos para que te puedan indicar la mejor forma de lograr hacer lo que pides en la consulta.
Aparte de la tabla en la BD tambien necesitoo codigo PHP que me compare las dos tablas, por esta razon opte en colocarlo aqui.

Gracias
  #4 (permalink)  
Antiguo 05/04/2010, 14:30
Avatar de abimaelrc
Colaborador
 
Fecha de Ingreso: mayo-2009
Ubicación: En el planeta de Puerto Rico
Mensajes: 14.734
Antigüedad: 15 años
Puntos: 1517
Respuesta: comparar registros entre dos tablas

Si, pero, la mejor forma es hacerlo en una sola consulta, y que esa consulta solo contenga los usuarios que no han hecho el pago. Por eso te sugiero que esperes que un moderador mueva este tema en el foro de mysql, tal vez todo lo puedas hacer directamente con base de datos.
__________________
Verifica antes de preguntar.
Los verdaderos amigos se hieren con la verdad, para no perderlos con la mentira. - Eugenio Maria de Hostos
  #5 (permalink)  
Antiguo 06/04/2010, 13:05
 
Fecha de Ingreso: noviembre-2009
Mensajes: 23
Antigüedad: 14 años, 5 meses
Puntos: 0
Respuesta: comparar registros entre dos tablas

Hola de nuevo
Encontre una respuesta que se acerca a lo que quiero.
Necesito que me imprima los alumnos que esten en la tabla alumnos pero que no esten en la tabla pagos.
Como puedo hacer esto??

Este el el codigo:

Código PHP:
Ver original
  1. <?php
  2. include ("conect.php");
  3. //$link=conectarse2();
  4.  
  5. $sql1=mysql_query("SELECT id FROM alumnos",$con);
  6. $sql2=mysql_query("SELECT id_alumnos FROM pago",$con);
  7.  
  8. $num = 0;
  9.  
  10. //busco en todos los resultados de select_1
  11.  
  12. while($data = mysql_fetch_array($sql1)){
  13.     //busco en todos los resultados de select_2
  14.     while($data2 = mysql_fetch_array($sql2)){
  15.         if($data['id'] = $data2['id_alumnos']){
  16.             $num++;
  17.         }
  18.     }
  19. }
  20. if($num >  0){
  21.     echo "Existen ".$num." coincidencias";
  22. }else{
  23.     echo "No existen coincidencias";
  24. }
  25. ?>

Gracias por su ayuda
  #6 (permalink)  
Antiguo 06/04/2010, 15:09
Colaborador
 
Fecha de Ingreso: marzo-2008
Ubicación: Cáceres
Mensajes: 3.735
Antigüedad: 16 años, 1 mes
Puntos: 300
Respuesta: comparar registros entre dos tablas

No,
para hacer eso es mejor usar una sola consulta y puedes hacerlo de dos maneras. Imaginemos que el id del mes que buscas es 4.
SELECT id_alumnos, alumno FROM alumnos WHERE id_alumnos NOT IN (select id_alumnos FROM pago where id_mes = 4)
O mejor aún, hacerlo con un LEFT JOIN
SELECT id_alumno, alumno FROM alumnos LEFT JOIN pago on alumnos.id_alumnos = pago.id_alumnos WHERE id_mes = 4 AND id_pago IS NULL
No he probado nada
  #7 (permalink)  
Antiguo 06/04/2010, 16:15
 
Fecha de Ingreso: noviembre-2009
Mensajes: 23
Antigüedad: 14 años, 5 meses
Puntos: 0
Respuesta: comparar registros entre dos tablas

Cita:
Iniciado por jurena Ver Mensaje
No,
para hacer eso es mejor usar una sola consulta y puedes hacerlo de dos maneras. Imaginemos que el id del mes que buscas es 4.
SELECT id_alumnos, alumno FROM alumnos WHERE id_alumnos NOT IN (select id_alumnos FROM pago where id_mes = 4)
O mejor aún, hacerlo con un LEFT JOIN
SELECT id_alumno, alumno FROM alumnos LEFT JOIN pago on alumnos.id_alumnos = pago.id_alumnos WHERE id_mes = 4 AND id_pago IS NULL
No he probado nada

Gracias jurena, asi lo estoy intentando hacer, pero no se utilizar el LEFT JOIN
Mi consulta seria asi:

Código MySQL:
Ver original
  1. SELECT A.* FROM alumnos A
  2. LEFT JOIN pago P ON  P.id_alumnos=A.id
  3. LEFT JOIN clase C C.id=P.id_clase
  4. LEFT JOIN mes M P.id_mes=M.id_mes
  5. WHERE P.id_mes='8' AND P.id_clase='5' AND P.id_pago is null

Pero me marca error.
No se si se puedan utilizar varios LEFT JOIN o si la sintaxias sea asi.
  #8 (permalink)  
Antiguo 06/04/2010, 16:30
Colaborador
 
Fecha de Ingreso: marzo-2008
Ubicación: Cáceres
Mensajes: 3.735
Antigüedad: 16 años, 1 mes
Puntos: 300
Respuesta: comparar registros entre dos tablas

Prueba esto. Yo no lo he probado.
SELECT A.* FROM alumnos A LEFT JOIN (SELECT P.id_alumnos al FROM pago P INNER JOIN clase C ON C.id=P.id_clase
INNER JOIN mes M ON P.id_mes=M.id_mes
WHERE P.id_mes='8' AND P.id_clase='5')T1 ON A.id_alumnos = T1.al WHERE T1.al IS NULL
  #9 (permalink)  
Antiguo 06/04/2010, 20:32
 
Fecha de Ingreso: noviembre-2009
Mensajes: 23
Antigüedad: 14 años, 5 meses
Puntos: 0
Respuesta: comparar registros entre dos tablas

Cita:
Iniciado por jurena Ver Mensaje
Prueba esto. Yo no lo he probado.
Código MySQL:
Ver original
  1. SELECT A.* FROM alumnos A LEFT JOIN (SELECT P.id_alumnos al FROM pago P INNER JOIN clase C ON C.id=P.id_clase
  2. INNER JOIN mes M ON P.id_mes=M.id_mes
  3. WHERE P.id_mes='8' AND P.id_clase='5')T1 ON A.id_alumnos = T1.al WHERE T1.al IS NULL
No me ejecuta por completo toda la consulta, ni en mysql ni en el php.
Mi version de mysql talvez no soporta este tipo de consulta tengo el mysql5.0 unicamente me hace la consulta del select A.* from alumnos A solo esta consulta me ejecuta lo demas lo omite.

Que tengo que hacer en este caso???

Gracias por tu respuesta me ayudo a coimprender un poco mas el uso del LEFT JOIN que estoy perdido en este tipo de consultas

Saludos

Etiquetas: comparar, dos, registros, 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:55.