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

Unir 3 consultas con distintos campos c/u

Estas en el tema de Unir 3 consultas con distintos campos c/u en el foro de Mysql en Foros del Web. Hola a todos! Compañeros de este gran foro, espero no haberme extendido mucho y que me puedan ayudar con estas consultas que no me dejan ...
  #1 (permalink)  
Antiguo 25/01/2012, 17:15
 
Fecha de Ingreso: octubre-2011
Ubicación: Buenos Aires
Mensajes: 84
Antigüedad: 12 años, 6 meses
Puntos: 2
Pregunta Unir 3 consultas con distintos campos c/u

Hola a todos!

Compañeros de este gran foro, espero no haberme extendido mucho y que me puedan ayudar con estas consultas que no me dejan dormir!!

Tengo la tabla notas con la siguiente info:

Legajo________Examen____________Nota
100______________A_______________6
100______________B_______________9
100______________C_______________4
200______________A_______________7
200______________C_______________8
300______________A_______________1
300______________B_______________8
300______________C_______________3
400______________Z_______________9

Lo que deseo hacer es una comparativa entre el usuario logueado y todo el resto.
(Consideremos que el usuario logueado es un dato, y en este caso el usuario logueado es el legajo 100, $usu_logueado=100).
Este es el resultado esperado en la pagina:

Legajo--------Afinidad----------Examenes en Comun
200____________100%_________________A
300_____________66%_________________B, C

  1. En legajo quiero que aparezcan todos los legajos con examenes en comun con $usu_logueado
  2. En afinidad quiero que me calcule:
    *cantidad de examenes en comun con $usu_logueado y con diferencia de nota < 2
    *cantidad de examenes en comun con $usu_logueado
    Despues dividiendo estos dos parametros en php obtendria el % de afinidad deseado.
  3. En examenes en comun quiero que me muestre los nombres de los examenes en comun con $usu_logueado y con diferencia de nota < 2

Yo estas 3 consultas las logro hacer pero por separado: No se como unirlas en una sola consulta, o si hay otra mejor forma de hacerlo:

1:
*legajos con examenes en comun con $usu_logueado:
Código PHP:
SELECT legajo
FROM notas
WHERE legajo
<>'$usu_logueado' 
AND examen IN
(SELECT examen FROM notas WHERE legajo='$usu_logueado'); 
2:
*cantidad de examenes en comun con $usu_logueado y con diferencia de nota < 2:
Código PHP:
SELECT examen,legajo,nota,usu.nota nota_logueado,count(legajo) as cant
FROM notas
              LEFT JOIN
              
(SELECT legajo,examen,nota
              FROM notas
              WHERE legajo
='$usu_logueado'usu
              ON notas
.examen=usu.examen
WHERE notas
.legajo <> '$usu_logueado'
AND ABS(notas.nota usu.nota) <'2'
AND notas.examen IN
(SELECT examen FROM notas WHERE legajo '$usu_logueado')
GROUP BY legajo ORDER BY cant DESC,legajo

*cantidad de examenes en comun con $usu_logueado:
Código PHP:
SELECT examen,legajo,nota,usu.nota nota_logueado,count(notas.legajo) as cant
FROM notas
              LEFT JOIN
              
(SELECT legajo,examen,nota
              FROM notas
              WHERE legajo
='$usu_logueado'usu
              ON notas
.examen=usu.examen
WHERE notas
.legajo <> '$usu_logueado' 
AND examen IN
(SELECT examen FROM notas WHERE legajo '$usu_logueado')
GROUP BY legajo ORDER BY cant DESC,legajo
3:
*nombre de los examenes en comun con $usu_logueado y con diferencia de nota < 2
Código PHP:
SELECT legajo,examen,nota,usu_log.nota
FROM notas
              LEFT JOIN
              
(SELECT legajo,examen,nota
              FROM notas
              WHERE legajo
='$usu_logueado'usu_log
              ON notas
.examen=usu_log.examen
WHERE legajo 
<> '$usu_logueado'
AND ABS(notas.nota usu_LOG.nota) <'2'
AND examen IN
(SELECT examen FROM notas WHERE legajo '$usu_logueado'); 
Gracias!!

Etiquetas: campos, distintos, join, php, select, 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 05:16.