Resultados de tablas relacionadas con y sin equivalenc

Hola, estoy intentando hacer lo siguiente en mysql y php, donde los alumnos le hacen preguntas a los profesores, tengo 4 tablas:
********************
# tabla_profesores |
--------------------
| id| nombre_prof |
--------------------
| 1 | andrea |
| 2 | diana |
| 3 | carolina |
********************
*******************
# tabla_alumnos |
-------------------
| id| nombre_alum |
-------------------
| 1 | luis |
| 2 | carlos |
| 3 | antonio |
*******************
******************************
# tabla_preguntas |
------------------------------
| id | IDalumno | pregunta |
------------------------------
| 1 | 3 | pregunta a |
| 2 | 1 | pregunta b |
| 3 | 3 | pregunta c |
| 4 | 3 | pregunta d |
******************************
************************************
# tabla_respuestas |
------------------------------------
| id| IDdelapregunta | respuesta |
------------------------------------
| 1 | 1 | respuesta a |
| 2 | 3 | respuesta c |
************************************
Quiero que php me muestre:
01. Todas las preguntas que ha realizado el alumno 3 (antonio).
02. Y a la vez quiero que a las preguntas que ya fueron respondidas les aparezca su respectiva respuesta
03. Y también quiero que las preguntas que no han sido respondidas aparezcan también en el listado con algo que diga "no han respondido tu pregunta".
Yo realicé la siguiente consulta pero el problema es que solo me muestra las preguntas que si tienen respuesta y las otras no me las muestra:
<?php
$resultado = mysql_query("
SELECT * FROM tabla_preguntas, tabla_alumnos, tabla_respuestas
WHERE tabla_preguntas.IDalumno = '3'
AND tabla_preguntas.IDalumno = tabla_alumnos.id
AND tabla_preguntas.id = tabla_respuestas.IDdelapregunta
",$conexion);
while ($datos = mysql_fetch_array($resultado)) {
?>
<table>
<tr>
<td><?php echo $datos['pregunta']; ?></td>
</tr>
<tr>
<td><?php echo $datos['respuesta']; ?></td>
</tr>
</table>
<?php
}
?>
Ayúdeme por favor a encontrar una solución para lo que quiero hacer, de antemano gracias por la colaboración.

1 respuesta

Respuesta
1
Lo que sucede es que la consulta que estas utilizando esta diseñada para traer solo los registros coincidentes, es decir que están en ambas tablas, para lograr lo que quieres debes utilizar una consulta de coincidentes y no coincidentes que se logra atrás vez de un "LEFT JOIN" o "RIGHT JOIN", según sea el caso. Así pues tu consulta debería ser la siguiente:
SELECT * FROM tabla_preguntas as P INNER JOIN tabla_alumnos as A ON (P.IDalumno=A.Id) LEFT JOIN tabla_respuestas as R ON (P.id=R.Iddelapregunta)
Esta te debe mostrar todas las preguntas hechas por los alumnos tengan o no tengan respuesta.
Hola Yescuder, gracias por la respuesta pero no me funciono, en el resultado me salen muchos resultados y solo estoy buscando el de el alumno "3", realicé este cambio (P.IDalumno='3'), pero tampoco funciono por que me muetra varias vecez la misma pregunta, agradezco me puedas seguir coloborando.
Te puse solo la parte de la consulta que te debe traer todos los registros estén o no relacionados, completa seria algo así:
SELECT * FROM tabla_preguntas as P INNER JOIN tabla_alumnos as A ON (P.idalumno=A.id) LEFT JOIN tabla_respuestas as R ON (P.id=R.IDdelapregunta) WHERE P.idAlumno=3.
Ahora si funciono, es que no entiendo muy bien eso de los JOIN y no me había dado cuenta del WHERE, me has solucionado el problema, gracias por la colaboración.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas