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
- En legajo quiero que aparezcan todos los legajos con examenes en comun con $usu_logueado
- 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. - 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');
*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;
*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');