PHP - Subconsultas

   
Vista:

Subconsultas

Publicado por Erik (14 intervenciones) el 26/09/2007 02:29:38
Hola,

Tengo un problema con PHP y MySql y es el siguiente:

Tengo 2 tablas una que contiene:

TABLA MATRICULAS
- id_estudiante : contiene los valores (1,2,3...,n)
- matricula : contienes los valores (EN0001, JP0003, AB0002,...n)


TABLA NOTAS
- id_estudiante : contiene los valores (1,2,3...,n)
- matematica : contienes los valores (70, 80, 90,...n)
- historia : contienes los valores (75, 85, 95,...n)

Lo siguiente es que tengo un formulario que captura una MATRICULA, entonces lo que quiero hacer es comparar la MATRICULA introducida con la que existe en la base de datos y capturar el ID_ESTUDIANTE correspondiente a esta MATRICULA.

Despues consultar el ID_ESTUDIANTE encontrado en la tabla NOTAS para obtener las notas de los estudiantes y mostrarla en pantalla, tengo un codigo pero no me resulta, espero me puedan ayudar en esto.

<?php
$conexion=mysql_connect("localhost","root","") or die("Problemas en la conexion");

mysql_select_db("data_liceo",$conexion) or die("Problemas en la selección de la base de datos");

$registros=mysql_query("SELECT * FROM notas WHERE id_estudiante IN (SELECT id_estudiante FROM matriculas WHERE id_estudiante ='$_REQUEST[id_estudiante]')",$conexion) or
die("Problemas en el select:".mysql_error());

if ($reg=mysql_fetch_array($registros))

{
echo "Matematica: ".$reg['matematica']."<br>";
echo "Lenguaje : ".$reg['historia']."<br>";

}
else
{
echo "No existe un alumno con ese mail.";
}
mysql_close($conexion);

?>
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

RE:Subconsultas

Publicado por Diego Romero (1450 intervenciones) el 26/09/2007 05:14:41
Te falta calificar el campo de qué tabla tiene que considerar la consulta. Pero aparte de eso, esa consulta no funciona como debería porque a la larga resultará en un resultado vacío, ¿está vacía porque ese ID no tiene materias o porque el ID no existe o la matrícula no existe?.

Creo que lo mejor es verficar que la matricula se corresponda con alguna almacenada en la tabla matriculas y solo si existe lanzar la otra consulta, algo así:

$sql = "SELECT id_estudiante FROM matriculas WHERE matricula='$_REQUEST[matricula]'"; // la búsqueda es para una matricula coincidente
$result = mysql_query($sql, $conexion);
if (mysql_num_rows($result) == 0) { echo "No existe esa matricula"; exit; }
$este_id = mysql_fetch_array($result);
$sql = "SELECT * FROM notas WHERE id_estudiante='$este_id[id_estudiante]'";
$result = mysql_query($sql, $conexion);
if (mysql_num_rows($result) == 0) { echo "El alumno no tiene materias"; exit; }
// Listar las materias aquí

Ten en cuenta que partes sabiendo la matricula, no el id del estudiante, tal como dices al principio.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Subconsultas

Publicado por Erik (14 intervenciones) el 27/09/2007 00:37:31
Diego, gracias por tu ayuda ya van 2 veces que me ayudas aunque la segunda no me funciono pero vi algo que andaba buscando en tu codigo y se lo agrege al que ya tenia y me funciono.

Realmente lo que queria era capturar el id de la tabla matricula y despues validarlo con el id de la tabla notas y despues conseguir en la tabla notas las notas segun el id. Consegui esto con el siguiente codigo.

Gracias!!!

<?php
$conexion=mysql_connect("localhost","root","") or die("Problemas en la conexion");

mysql_select_db("data_liceo",$conexion) or die("Problemas en la selección de la base de datos");

$registros=mysql_query("SELECT * FROM matriculas WHERE matricula ='$_REQUEST[matricula]'",$conexion) or
die("Problemas en el select1:".mysql_error());

$reg = mysql_fetch_array($registros);


$registros1=mysql_query("SELECT * FROM notas WHERE id_estudiante = '$reg[id_estudiante]'",$conexion) or
die("Problemas en el select2:".mysql_error());

if (mysql_num_rows($registros1) == 0) { echo "El alumno no tiene materias"; exit; }

if ($reg=mysql_fetch_array($registros1))

{
echo "Matematica: " .$reg['matematica']."<br>";
echo "Lenguaje : " .$reg['lenguaje']."<br>";

}
else
{

echo "No existe Matricula.";
}

mysql_close($conexion);

?>
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Subconsultas

Publicado por Diego Romero (1450 intervenciones) el 27/09/2007 01:00:33
¿Y qué pasa si se pide consultar una matrícula que no existe?.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Subconsultas

Publicado por Erik (14 intervenciones) el 27/09/2007 06:43:10
Me dice que la "Matricula no existe".

Lo probe aunque hay un par de cosas que no entiendo muy bien todavia, me gustaria hablar contigo para decirte acerca de lo que estoy haciendo. mi e-mail es nivarz@hotmail.com soy de Republica Dominicana.

Gracias
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Subconsultas

Publicado por elena (1 intervención) el 28/11/2008 23:34:39
HOlaa!!!

Necesito hacer una subconsulta en php, he hecho la consulta en mysql y me funciona pero al pasarla a php solo considera el 1º select.
A ver si me pudieras ayudar:


CONSULTA EN MYSQL

SELECT aula FROM asignatura WHERE codigo LIKE 'BIOLOGA' OR codigo_guia LIKE 'BIOLOGIA' OR descripcion LIKE 'BIOLOGIA' AND EXISTS (SELECT * FROM titulacion WHERE codigo LIKE 'CCAA' OR codigo_guia LIKE 'CCAA' OR descripcion LIKE 'CCAA' AND asignatura.titulacion_id = codigo_guia);

CONSULTA EN PHP:

$query = mysql_query("SELECT aula FROM asignatura WHERE codigo LIKE '$asignatura' OR codigo_guia LIKE '$asignatura' OR descripcion LIKE '$asignatura' AND EXISTS (SELECT * FROM titulacion WHERE codigo LIKE '$titulacion' OR codigo_guia LIKE '$titulacion' OR descripcion LIKE '$titulacion')",$conexion);

Gracias por adelantadoooo!!!!
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar