Foros del Web » Programando para Internet » PHP »

consulta multiple tablas

Estas en el tema de consulta multiple tablas en el foro de PHP en Foros del Web. buenas noches amigos ando medio desorientado sobre este tema de consultas multiples. el problema es el siguiente tengo varias tablas que e relacionado anteriormente que ...
  #1 (permalink)  
Antiguo 13/06/2012, 17:01
 
Fecha de Ingreso: abril-2011
Mensajes: 52
Antigüedad: 13 años
Puntos: 0
Exclamación consulta multiple tablas

buenas noches amigos ando medio desorientado sobre este tema de consultas multiples. el problema es el siguiente tengo varias tablas que e relacionado anteriormente que serian:

Código PHP:
tabla alumno
1. id_alumno 
(PK)
2. nombre
3. direccion
4. telefono
5. cedula
6. sexo
7. nomrep
8. numrep 
Código PHP:
tabla grado
1. id_ano 
(pK)
2. ano 
Código PHP:
tabla seccion
1. id_seccion
(PK)
2. seccion 
Código PHP:
tabla seccion_grado
1. id_ano 
(FK"grado"
2. id_seccion (FK"seccion"
3. id_alumno (FK)"alumno" 
Bueno tengo un registro el cual me guarda las variables en las diferentes tablas! anterior habia hecho ano y seccion dentro de la tabla alumno pero el problema esta en que es un sistema de control de notas y que dependiendo del ano pueden cursar algunas materias. entonces decidi separar las tablas pero el problema esta en cuando voy a hacer la consulta.!

la consulta que antes hacia la hacia completa de solo la tabla alumnos!

Código PHP:
<?PHP
$instruccion 
"select nombre,sexo,ano,direccion,cedula,telefono,nomrep,numrep,seccion
            from alumno"
;
$consulta mysql_query($instruccion,$conexion)
                or die (
"Fallo en la consulta");
        
$nf mysql_num_rows($consulta);
        if (
$nf 0)
        {
            print(
"<TABLE align='center' border ='2'>");
            print(
"<CAPTION><h2>LISTADO GENERAL DE ALUMNOS EN BASE DE DATOS</h2></CAPTION>");
            print(
"<TR>");
            print (
"<TH>Nombre del Alumno</TH>");
            print (
"<TH>Sexo</TH>");
            print (
"<TH>Año Cursando</TH>");
            print (
"<TH>Seccion</TH>");
            print (
"<TH>Direccion</TH>");
            print (
"<TH>Cedula</TH>");
            print (
"<TH>Telefono</TH>");
            print (
"<TH>Nombre Del Representante</TH>");
            print (
"<TH>Telefono Del Representante</TH>");
            print(
"</TR>");
            for (
$x=0;$x<$nf;$x++){
                
$fila mysql_fetch_array($consulta);
                print(
"<TR>");
                print (
"<TD>".$fila['nombre']."</TD>");
                print (
"<TD>".$fila['sexo']."</TD>");
                print (
"<TD>".$fila['ano']."</TD>");
                print (
"<TD>".$fila['seccion']."</TD>");
                print (
"<TD>".$fila['direccion']."</TD>");
                print (
"<TD>".$fila['cedula']."</TD>");
                print (
"<TD>".$fila['telefono']."</TD>");
                print (
"<TD>".$fila['nomrep']."</TD>");
                print (
"<TD>".$fila['numrep']."</TD>");
                print (
"</TR>");
            print(
"</TR>");
            }
            print(
"</TABLE>"); }
        else {
            print (
"No hay Alumnos almacenados en Base de Datos<BR>");
        }
?>
Pero ahora quiero seleccionar de las multiples tablas para que me lo imprima! selecionar todo y que cada año corresponda con el id_alumno correspondiente.

no puedo hacer las seleccion multiples! no consigo como!

antemano muchas gracias por la ayuda que me an prestado!
  #2 (permalink)  
Antiguo 13/06/2012, 17:57
Avatar de fjrueda  
Fecha de Ingreso: marzo-2008
Ubicación: Bucaramanga
Mensajes: 313
Antigüedad: 16 años, 1 mes
Puntos: 35
Respuesta: consulta multiple tablas

JenderXd.

Lo primero que se me ocurre decirle es que separe el HTML del PHP, es mas ordenado y es mas eficiente.

ahora para la consulta pruebe con esto.
Código:
SELECT al.* FROM alumno al, grado g, seccion_grado sg WHERE g.id_ano = sg.id_ano AND sg.id_alumno = al.id_alumno AND g.ano = "año a buscar"
Repasando mas acerk de SQL ya podra usar JOIN, GROUP BY y otros comandos mas utiles y aun asi yo le diria que acomodara mas las tablas, Tiene algo que no me cuadra de mucho con eso de crear una tabla solo para un año.

Hagale y responde.
  #3 (permalink)  
Antiguo 13/06/2012, 18:04
Avatar de Vector_Latino  
Fecha de Ingreso: mayo-2012
Mensajes: 25
Antigüedad: 11 años, 11 meses
Puntos: 6
Respuesta: consulta multiple tablas

Hola JenderxD, viendo la estructura de la ultima tabla "seccion_grado" creo que deberías asignarle una llave primaria, ya sea "id_seccion_grado" o como tu quieras colocarle, si usas esta llave podrías probar esta consulta.

La tabla seccion_grado suponiendo que tenga estos campos:
  • id_seccion_grado
  • id_ano
  • id_seccion
  • id_alumno

El codigo esta pensado también para recuperar datos de un solo alumno, para ver todos los alumnos solo es quitar la linea "id_seccion_grado = '12345' AND ", no probé el script pero creo que debería funcionar.
Código PHP:
mysql_query("select nombre,sexo,ano,direccion,cedula,telefono,nomrep,numrep,seccion 
from alumno,grado,seccion,seccion_grado
where 
    id_seccion_grado = '12345' AND 
    seccion_grado.id_ano = grado.id_ano AND
    seccion_grado.id_seccion = seccion.id AND
    seccion_grado.id_alumno  = alumno.id_alumno"
); 
De esta forma la consulta te devolvería todos los campos que necesitas, sin importar que la tabla alumno no tenga el campo ano o seccion ya que estos valores los saca de las tablas grado y seccion.

ya si no le colocaras llave primaria a esta tabla la consulta seria un poco mas compleja ya que tendrias que saber los valores exactos de los campos id_ano, id_seccion y id_alumno para poder hacer la consulta que seria algo así:

Código PHP:
mysql_query("
select nombre,sexo,ano,direccion,cedula,telefono,nomrep,numrep,seccion 
from alumno,grado,seccion
where 
    id_ano = '2012' AND
    id_seccion = 'Seccion X' AND 
    id_alumno = 'Vector Latino'
"
); 
como se ve no seria muy util el crear esta nueva tabla "seccion_grado" sin la llave primaria, ya que para la consulta ni la usarías.

Espero que te sirva.
Saludos...

Última edición por Vector_Latino; 13/06/2012 a las 18:18
  #4 (permalink)  
Antiguo 13/06/2012, 18:30
 
Fecha de Ingreso: abril-2011
Mensajes: 52
Antigüedad: 13 años
Puntos: 0
Respuesta: consulta multiple tablas

Cita:
Iniciado por fjrueda Ver Mensaje
Código:
SELECT al.* FROM alumno al, grado g, seccion_grado sg WHERE g.id_ano = sg.id_ano AND sg.id_alumno = al.id_alumno AND g.ano = "año a buscar"
Probe Este codigo y nada amigo! y pues el problema es el siguiente!

necesito agregar materias a esos alumnos la tabla seria

Código:
 tabla materia
1. id_materia(PK)
2. materia
3. id_ano (FK)"grado"
4. nivel_materia
Código:
 tabla nota
1. id_notas(PK)
2. id_alumno (FK)"alumno"
3. id_materia (FK)"materia"
4. lapso1
5. lapso2
6. lapso3
7. definitiva
lo que sucede es lo siguiente yo puedo registrar un alumno y ese alumno puede estudiar 7mo verdad! solo quisiera que se me seleccionaran las materias de 7mo porq un alumno de 7mo no ve las mismas materias de octavo.

pense hacerlo asi! con la relacion de esas tablas si alguien o tu tienes algo como guiarme que sea mas sencillo se lo agradeceria!



Cita:
Iniciado por Vector_Latino Ver Mensaje

El codigo esta pensado también para recuperar datos de un solo alumno, para ver todos los alumnos solo es quitar la linea "id_seccion_grado = '12345' AND ", no probé el script pero creo que debería funcionar.
Código PHP:
mysql_query("select nombre,sexo,ano,direccion,cedula,telefono,nomrep,numrep,seccion 
from alumno,grado,seccion,seccion_grado
where 
    id_seccion_grado = '12345' AND 
    seccion_grado.id_ano = grado.id_ano AND
    seccion_grado.id_seccion = seccion.id AND
    seccion_grado.id_alumno  = alumno.id_alumno"
); 
probe el codigo que me diste, pero nada. el select lo hago desde otra instruccion! te muestro

Código PHP:
<?PHP
$instruccion 
"select nombre,sexo,ano,direccion,cedula,telefono,nomrep,numrep,seccion
from alumno,grado,seccion,seccion_grado
where    
    seccion_grado.id_ano = grado.id_ano AND
    seccion_grado.id_seccion = seccion.id"
;

        
$consulta mysql_query($instruccion,$conexion)
                or die (
"Fallo en la consulta");
        
$nf mysql_num_rows($consulta);
        if (
$nf 0)?>
me da el error Fallo en la consulta que es cuando no agarra el select por parte de la instruccion.! esto me tiene loco amigo!


arriba explique lo que estoy haciendo si tienes una mejor idea para orientarme te la agradezco
  #5 (permalink)  
Antiguo 13/06/2012, 18:51
Avatar de zarkiel  
Fecha de Ingreso: febrero-2012
Mensajes: 51
Antigüedad: 12 años, 2 meses
Puntos: 15
Respuesta: consulta multiple tablas

Sería mejor si utilizas JOIN y la consulta sería la siguiente:
Código SQL:
Ver original
  1. SELECT alumno.*, grado.ano, seccion.seccion FROM seccion_grado  // ya que todo se combina en seccion_grado de ahi hacemos la selección
  2. INNER JOIN alumno ON alumno.id_alumno = seccion_grado.id_alumno // unimos con la tabla alumno
  3. INNER JOIN grado ON grado.id_ano = seccion_grado.id_ano // unimos con la tabla grado
  4. INNER JOIN seccion ON seccion.id_seccion = seccion_grado.id_seccion // unimos con la tabla sección

espero te sirva.
__________________
« Los deseos pueden hacerse realidad, pero no basta con esperar un milagro, el milagro lo hacemos nosotros... Aquí y ahora »
  #6 (permalink)  
Antiguo 13/06/2012, 18:55
Avatar de zarkiel  
Fecha de Ingreso: febrero-2012
Mensajes: 51
Antigüedad: 12 años, 2 meses
Puntos: 15
Respuesta: consulta multiple tablas

Algo más, lo mismo que dijo fjrueda, es mejor separar HTML y PHP
__________________
« Los deseos pueden hacerse realidad, pero no basta con esperar un milagro, el milagro lo hacemos nosotros... Aquí y ahora »
  #7 (permalink)  
Antiguo 13/06/2012, 19:05
 
Fecha de Ingreso: abril-2011
Mensajes: 52
Antigüedad: 13 años
Puntos: 0
Respuesta: consulta multiple tablas

disculpa tanta molestadera.! soy nuevo en esto y quisiera aprender jeje quisiera saber si al momento de imprimir lo dejo como lo tengo arriba en el codigo o seria de otra forma? yo quiero es traer todos los datos amigos!

si puedes explicarme algo mejor y disculpa! este foro me a sido de gran ayuda y he aprendido nuevas cosas, este tema de mysql y php me esta pareciendo interesante y de verdad quisiera expandir mis conocimientos.
  #8 (permalink)  
Antiguo 13/06/2012, 19:19
Avatar de zarkiel  
Fecha de Ingreso: febrero-2012
Mensajes: 51
Antigüedad: 12 años, 2 meses
Puntos: 15
Respuesta: consulta multiple tablas

Supongo que tu objetivo final es imprimir todos los datos de los alumnos incluyendo la sección y el grado, entonces tu código final sería este:

Código PHP:
Ver original
  1. <?PHP
  2. $instruccion = 'SELECT alumno.*, grado.ano, seccion.seccion FROM seccion_grado
  3.    INNER JOIN alumno ON alumno.id_alumno = seccion_grado.id_alumno
  4.    INNER JOIN grado ON grado.id_ano = seccion_grado.id_ano
  5.    INNER JOIN seccion ON seccion.id_seccion = seccion_grado.id_seccion';
  6. $consulta = mysql_query($instruccion,$conexion)
  7.                 or die ('Fallo en la consulta');
  8.         $nf = mysql_num_rows($consulta);
  9.         if ($nf > 0)
  10.         {
  11.         // cerramos PHP y cambiamos a HTML
  12.         ?>
  13.            <TABLE align='center' border ='2'>
  14.            <CAPTION><h2>LISTADO GENERAL DE ALUMNOS EN BASE DE DATOS</h2></CAPTION>
  15.            <TR>
  16.             <TH>Nombre del Alumno</TH>
  17.             <TH>Sexo</TH>
  18.             <TH>Año Cursando</TH>
  19.             <TH>Seccion</TH>
  20.             <TH>Direccion</TH>
  21.             <TH>Cedula</TH>
  22.             <TH>Telefono</TH>
  23.             <TH>Nombre Del Representante</TH>
  24.             <TH>Telefono Del Representante</TH>
  25.            </TR>
  26.            <?
  27.            // volvemos a php
  28.             for ($x=0;$x<$nf;$x++){
  29.                 $fila = mysql_fetch_array($consulta);
  30.                 // etc
  31.                 ?>
  32.                <TR>
  33.                 <TD><?=$fila['nombre']?></TD>
  34.                 <TD><?=$fila['sexo']?></TD>
  35.                 <TD><?=$fila['ano']?></TD>
  36.                 <TD><?=$fila['seccion']?></TD>
  37.                 <TD><?=$fila['direccion']?></TD>
  38.                 <TD><?=$fila['cedula']?></TD>
  39.                 <TD><?=$fila['telefono']?></TD>
  40.                 <TD><?=$fila['nomrep']?></TD>
  41.                 <TD><?=$fila['numrep']?></TD>
  42.                 </TR>
  43.            </TR>
  44.            <?php
  45.             }
  46.             ?>
  47.            </TABLE>
  48.            <?php
  49.            } else {
  50.             ?>
  51.             No hay Alumnos almacenados en Base de Datos<BR>
  52.             <?
  53.         }
  54. ?>
__________________
« Los deseos pueden hacerse realidad, pero no basta con esperar un milagro, el milagro lo hacemos nosotros... Aquí y ahora »
  #9 (permalink)  
Antiguo 13/06/2012, 19:36
 
Fecha de Ingreso: abril-2011
Mensajes: 52
Antigüedad: 13 años
Puntos: 0
Respuesta: consulta multiple tablas

me da un pequeño error en esta linea! como si estuviera demas una llave!


Código PHP:
Ver original
  1. <?PHP
  2.            
  3. 49.  } else {  
  4.    
  5.          
  6. ?>

me dice esto syntax error, unexpected '}' in C:\wamp\www\PROYECTO\sistemacontrolnotas\listado_a lumno.php
  #10 (permalink)  
Antiguo 13/06/2012, 19:44
Avatar de zarkiel  
Fecha de Ingreso: febrero-2012
Mensajes: 51
Antigüedad: 12 años, 2 meses
Puntos: 15
Respuesta: consulta multiple tablas

A mi me funciona bien
__________________
« Los deseos pueden hacerse realidad, pero no basta con esperar un milagro, el milagro lo hacemos nosotros... Aquí y ahora »
  #11 (permalink)  
Antiguo 13/06/2012, 19:58
 
Fecha de Ingreso: abril-2011
Mensajes: 52
Antigüedad: 13 años
Puntos: 0
Respuesta: consulta multiple tablas

Cita:
Iniciado por zarkiel Ver Mensaje
A mi me funciona bien
probe colocandole los nombres php al comienzo del php que me diste sin php

<?
?>
a asi!

<?PHP
?>

pero me da el error de que ningun alumno esta registrado en la base de datos! mmm!

"No hay Alumnos almacenados en Base de Datos"

pero tengo 6 registros!! y nada que me da
  #12 (permalink)  
Antiguo 13/06/2012, 20:04
Avatar de zarkiel  
Fecha de Ingreso: febrero-2012
Mensajes: 51
Antigüedad: 12 años, 2 meses
Puntos: 15
Respuesta: consulta multiple tablas

definiste la variable $conexion??

Código PHP:
Ver original
  1. $consulta = mysql_query($instruccion,$conexion)

lo de :

<?

?>

es porque tienes desactivadas las etiquetas cortas y por eso tienes que escribirlas así:
<?php

?>
__________________
« Los deseos pueden hacerse realidad, pero no basta con esperar un milagro, el milagro lo hacemos nosotros... Aquí y ahora »
  #13 (permalink)  
Antiguo 13/06/2012, 20:06
 
Fecha de Ingreso: abril-2011
Mensajes: 52
Antigüedad: 13 años
Puntos: 0
Respuesta: consulta multiple tablas

Código PHP:
<?PHP
        

        
include('config.php');    
     
        
$conexion mysql_connect("localhost","root","")
        or die (
"Fallo la conexion con la base de datos <br>");
        
        
mysql_select_db("sistema")
        or die (
"No se puede seleccionar la base de datos<br>");?>
  #14 (permalink)  
Antiguo 13/06/2012, 20:17
Avatar de zarkiel  
Fecha de Ingreso: febrero-2012
Mensajes: 51
Antigüedad: 12 años, 2 meses
Puntos: 15
Respuesta: consulta multiple tablas

Entonces deben ser los datos en la base de datos, porque al utilizar INNER JOIN los datos tienen que ser correspondientes por ejemplo:

Código PHP:
Ver original
  1. Tabla Alumno:
  2. id_alumno    |     nombre
  3. 1                     |     carlos
  4. 2                     |     jose
  5. 3                     |     juan

Código PHP:
Ver original
  1. Tabla Grado:
  2. id_ano   | ano
  3. 1             |  2011
  4. 2             |  2012

Tabla Seccion:
Código PHP:
Ver original
  1. id_seccion   |   seccion
  2. 1                    |   A
  3. 2                    |   B
  4. 3                    |   C

Los resultados que obtengas dependen de la siguiente tabla

Código PHP:
Ver original
  1. Tabla seccion_grado:
  2. id_ano | id_seccion | id_alumno
  3. 1             1                     1
  4. 1             4                     2  
  5. 2             2                     3

Si hacemos una consulta, sólo nos mostrará 2 alumnos, porque no existe una sección con id=4
por lo cual los id que se inserten en esta tabla deberian de ser válidos
si quieres que te muestre los datos aunque no haya relación
podrias probar con LEFT JOIN o RIGHT JOIN
__________________
« Los deseos pueden hacerse realidad, pero no basta con esperar un milagro, el milagro lo hacemos nosotros... Aquí y ahora »
  #15 (permalink)  
Antiguo 13/06/2012, 20:37
 
Fecha de Ingreso: abril-2011
Mensajes: 52
Antigüedad: 13 años
Puntos: 0
Respuesta: consulta multiple tablas

con RIGHT JOIN me muestra pero no estan los campos vacios!! mmm e vaciado 2 veces todas las tablas para que queden en cooncordancia pero nada!..


sera las tablas relacion? tu como harias para hacer que un alumno cuando se registre tenga una seccion y un grado=año! osea


Jender Valero seccion:C Grado=2


yo lo hize con las tablas que mencione arriba estara bien diseñado esas relaciones o como seria mejor! disculpa si pregunto mucho es que me tiene desorientado esto!
  #16 (permalink)  
Antiguo 13/06/2012, 20:49
Avatar de zarkiel  
Fecha de Ingreso: febrero-2012
Mensajes: 51
Antigüedad: 12 años, 2 meses
Puntos: 15
Respuesta: consulta multiple tablas

Grado y Seccion lo podrias juntar en una sola tabla
por ejemplo:

Código HTML:
Ver original
  1. Tabla Aula:
  2. - id_aula
  3. - grado
  4. - seccion

y seccion_grado lo podrias cambiar por matricula

Código HTML:
Ver original
  1. Tabla Matricula
  2. - id_matricula
  3. - id_aula
  4. - id_alumno

Así evitarás repetir datos

lue
__________________
« Los deseos pueden hacerse realidad, pero no basta con esperar un milagro, el milagro lo hacemos nosotros... Aquí y ahora »
  #17 (permalink)  
Antiguo 13/06/2012, 20:51
Avatar de zarkiel  
Fecha de Ingreso: febrero-2012
Mensajes: 51
Antigüedad: 12 años, 2 meses
Puntos: 15
Respuesta: consulta multiple tablas

Si necesitas más ayuda podrias agregarme a [email protected] para hablar con más fluidez
__________________
« Los deseos pueden hacerse realidad, pero no basta con esperar un milagro, el milagro lo hacemos nosotros... Aquí y ahora »

Etiquetas: mysql, registro, tabla, tablas, variables
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 11:50.