Skip to content

Consultas en php y mysql para dos o mas tablas

noviembre 6, 2010

En una ocasión cuando recién iniciaba a programar en php una bases de datos (que son tan funcionales), necesitaba obtener de una tabla el código del alumno y con ese código necesitaba obtener las calificaciones que estaban en otra tabla diferente. Y dure mas de 4 horas en encontrar una respuesta clara y era tan simple como incluirlas en el SELECT de SQL. Así que recordando ese dolor de cabeza he pensado en escribir este artículo para que tú te ahorres el tiempo que me llevo a mí.    

También sirve cuando el resultado que te solicitan entregar en respuesta de una consulta (informe) se construye de extraer datos de tablas diferentes, y si has pensado en hacer para cada tabla un SELECT sobre los datos solicitados, pues déjame decirte que hay una forma mas sencilla de hacer dichas consultas.

Para realizar las consulta necesitas poner después del SELECT el nombre de la tabla, punto y el nombre del campo que necesitas de esa tabla, luego donde dice FROM tienes que anotar todas las tablas que vas a consultar y puedes utilizar un WHERE para filtrar la información utilizando el campo en común.

Por ejemplo, si tengo una tabla que se llama “alumnos” con los campos (id, nocontrol, nombre) y otra mas que se llama “calificaciones” cuyos campos son (id, nocontrol_alumno,calificacion, materia) y la consulta requiere el nombre del alumno con su(s) calificaciones correspondientes la sentencia sql puediese quedar así: SELECT alumnos.nombre, calificaciones.calificacion FROM alumnos, calificaciones WHERE alumnos.nocontrol = 1234 AND calificaciones.nocontrol_alumno = 1234.

Ahora si lo que se requieren son todos los campos de la tabla “alumno” y todos los campos de la tabla “calificaciones”, la sentencia quedaría así: SELECT alumnos.*, calificaiones.* FROM alumnos, calificaciones.

Espero te haya servido este articulo, y recuerda que siempre reviso mis artículos para checar los comentarios y en su caso responder personalmente, así que siente la confianza de postear en tu comentario  dudas y/o frustraciones cuando inicias a  programar en php

Anuncios
14 comentarios
  1. Carlos Houriet permalink

    hola genaro: me gustaria saber si pudistes terminar el sistema de gestion del centro educativo

  2. Ary permalink

    Hola yo tengo una duda enorme estoy tratando de hacer una consulta sobre las calificaciones de solo un alumno, pero no me sale ya intente con varios codigos, y el ultimo que viene en esta pagina ahora me marca que mi base de datos esta mal,mi codigo es este:

    Procesador de Datos

    <?php
    $base="escuela"
    $conexion=mysql_connect('localhost','root','');
    mysql_select_db($base,$conexion);
    $r=mysql_query("SELECT alumnos.no_de_control,ap,am,nom,materias.materia,calificaciones.parcial1
    FROM alumnos,materias,calificaciones
    WHERE alumnos.no_de_control= 2 AND
    calificaciones.no_de_control= 2 ");
    echo "”;
    while ($renglon= mysql_fetch_row($r))
    {
    echo “”;
    foreach ($renglon as $campo)

    echo “”, $campo, ” “;
    }
    echo “”;
    mysql_close();
    ?>

    cual es el error?

  3. Karis permalink

    Hola ando con la cabeza grande Tengo una base de datos con dos tablas, programación y capacitación. realizo una consulta inicial a programación por el código del operador si no lo encuentra allí necesito que lo busque en la tabla capacitación. el código esta funcionando así pero no me muestra si no aparece en programación.

    Código PHP:

    <?
    // =========================================================================
    // =========================================================================
    // INICIO DEL BLOQUE DE CONEXION A LA BASE DE DATOS

    if($empresa == 99){

    $conexion = mysql_connect ($servidor,$usuario,$password);
    if(!$conexion)
    {
    echo ('Imposible conectarse con MySQL,'); exit();
    }
    if(!mysql_select_db($base_de_datos))
    {
    echo ('Imposible conectarse con la BD'); exit();
    }
    // FIN DEL BLOQUE DE CONEXION A LA BASE DE DATOS
    // =========================================================================
    // =========================================================================
    // $codigo = $_POST['codigo'];
    $SQL = "Select NombreOperador from programacion";
    $SQL .= " Where codigo = '$codigo'";
    $resultado = mysql_query($SQL,$conexion);
    $row = mysql_fetch_array($resultado);
    /////////////////////////////////////////////////////
    if($row["NombreOperador"] != "")
    {
    print "BIENVENID@ ” . “”.$row[“NombreOperador”] . ““;
    }
    else
    {

    // $codigo = $_POST[‘codigo’];
    $SQL = “Select NombreOperador from capacitacion”;
    $SQL .= ” Where codigo = ‘$codigo'”;
    $resultado2 = mysql_query($SQL,$conexion);
    $row2 = mysql_fetch_array($resultado2);
    print “BIENVENID@ ” . $row2[“NombreOperador”] . “”;

    }

    ////////////////////////////////////////////////////
    $sql = “select max(id), date from log group by date”;
    $resultado = mysql_query($sql,$conexion);
    $log = mysql_fetch_array($resultado);
    print “Fecha de Publicacion: ” . $log[1] . “”;
    mysql_free_result($resultado);
    ?>

  4. genaro permalink

    hola programar en php, una consulta estoy haciendo un buscador ejemplos:

    tengo dos tablas: 1.- alumno (id, nombre, fecha_nac, direccion, telefono) y 2.-calificaciones (id_cal, parcial1, parcial2, parcial3, promedio, promovido, nopromovido)

    base de datos: colegio

    mi consulta es la siguiente:

    e diseñado un formulario en php, donde tengo un campo de texto y un boton-“buscar”. Cuando ingreso el nombre o el id_alumno del estudiante me busque el (id, nombre, id_cal, parcial1, parcial2, parcial3, promedio, promovido o nopromovido.)

    pues el buscador, tienes que extraer de dos tablas diferente el registro con una tabla no tengo problemas.

    gracias por tu colaboracion de ante mano. programador en php

    • Hola, si entendí bien tu problema, esta seria la solucion: $sql = “SELECT alumno.id,alumno.nombre,calificaciones.id_cal,calificaciones.parcial1,calificaciones.parcial2, calificaciones.parcial3,calificaciones.promedio,calificaciones.promovido,calificaciones.nopromovido FROM alumno, calificaciones WHERE alumno.nombre=$nombre”
      Te explico, necesitas poner la tabla y seguido de un punto el nombre del campo a consultar, el único problema que veo es que no tienes un campo en común en ambas tablas, por ejemplo, un campo id_alumno en la tabla calificaciones para que en la parte del WHERE puedas poner “alumnos.id = calificaciones.id_alumno” y asi solo filtre la información que coincide en ambas tablas. Espero te sirva de ayuda y sigo a tus ordenes, en lo que pueda ayudarte.

  5. Muy bien 🙂 si funciona!! gracias

  6. David permalink

    Hola… y como seria en 3 tablas ? tabla profesor, tabla nivel y tabla estado… son tres niveles de capacitacion en donde el profesor se inscribe a lo cual necesito mediante una consulta el estado de un profesor por cada nivel que se haya inscrito ( si aprobo, si ya llego su certificado para pueda recogerlo, si se inscribio en ese nivel) GRACIAS DE ANTEMANOS 🙂

    • Hola Davis, pues es sencillo solo agregas la tercer tabla, asi SELECT campo1.tabla1, campo1.tabla2,campo3.tabla3 FROM tabla1, tabla2, tabla3 WHERE campo1.tabla1 = ‘VALOR’ AND campo1.tabla2=’VALOR’ AND campo1.tabla3=’VALOR’

  7. Ulices permalink

    En la consulta que hago solo espero ver hasta el registro 10 pero se me repite muchas veces y eso ocurre cuando ejecuta la consulta a ambas tablas (medico y especialidad)

  8. Ulices permalink

    si quieres te paso por correo lo que estoy haciendo paara ver si me puedes echar la mano por favor

  9. Ulices permalink

    Este es mi codigo

    y el resultado
    Id_medico Nombre: Apellidos Especialidad
    1 Lindoro Paredes Juarez Odontologo
    2 Francisco Romero Lima Odontologo
    3 Adalberto Olmos Pelayo Odontologo
    4 Mireya Castillo Vazquez Odontologo
    5 Azael Sanches Ortega Odontologo
    6 Jesus Tellez Lorencez Odontologo
    7 Oscar Cuz Mejia Odontologo
    8 Arturo Gonzalez Huerta Odontologo
    9 Mirna Games Suarez Odontologo
    10 Dafne Botello May Odontologo
    1 Lindoro Paredes Juarez Medico general
    2 Francisco Romero Lima Medico general
    3 Adalberto Olmos Pelayo Medico general
    4 Mireya Castillo Vazquez Medico general
    5 Azael Sanches Ortega Medico general
    6 Jesus Tellez Lorencez Medico general
    7 Oscar Cuz Mejia Medico general
    8 Arturo Gonzalez Huerta Medico general
    9 Mirna Games Suarez Medico general
    10 Dafne Botello May Medico general
    1 Lindoro Paredes Juarez Odontologo
    2 Francisco Romero Lima Odontologo
    3 Adalberto Olmos Pelayo Odontologo
    4 Mireya Castillo Vazquez Odontologo
    5 Azael Sanches Ortega Odontologo
    6 Jesus Tellez Lorencez Odontologo
    7 Oscar Cuz Mejia Odontologo
    8 Arturo Gonzalez Huerta Odontologo
    9 Mirna Games Suarez Odontologo
    10 Dafne Botello May Odontologo
    1 Lindoro Paredes Juarez Medico general
    2 Francisco Romero Lima Medico general
    3 Adalberto Olmos Pelayo Medico general
    4 Mireya Castillo Vazquez Medico general
    5 Azael Sanches Ortega Medico general
    6 Jesus Tellez Lorencez Medico general
    7 Oscar Cuz Mejia Medico general
    8 Arturo Gonzalez Huerta Medico general
    9 Mirna Games Suarez Medico general
    10 Dafne Botello May Medico general
    1 Lindoro Paredes Juarez Odontologo
    2 Francisco Romero Lima Odontologo
    3 Adalberto Olmos Pelayo Odontologo
    4 Mireya Castillo Vazquez Odontologo
    5 Azael Sanches Ortega Odontologo
    6 Jesus Tellez Lorencez Odontologo
    7 Oscar Cuz Mejia Odontologo
    8 Arturo Gonzalez Huerta Odontologo
    9 Mirna Games Suarez Odontologo
    10 Dafne Botello May Odontologo
    1 Lindoro Paredes Juarez Medico general
    2 Francisco Romero Lima Medico general
    3 Adalberto Olmos Pelayo Medico general
    4 Mireya Castillo Vazquez Medico general
    5 Azael Sanches Ortega Medico general
    6 Jesus Tellez Lorencez Medico general
    7 Oscar Cuz Mejia Medico general
    8 Arturo Gonzalez Huerta Medico general
    9 Mirna Games Suarez Medico general
    10 Dafne Botello May Medico general
    1 Lindoro Paredes Juarez Odontologo
    2 Francisco Romero Lima Odontologo
    3 Adalberto Olmos Pelayo Odontologo
    4 Mireya Castillo Vazquez Odontologo
    5 Azael Sanches Ortega Odontologo
    6 Jesus Tellez Lorencez Odontologo
    7 Oscar Cuz Mejia Odontologo
    8 Arturo Gonzalez Huerta Odontologo
    9 Mirna Games Suarez Odontologo
    10 Dafne Botello May Odontologo
    1 Lindoro Paredes Juarez Medico general
    2 Francisco Romero Lima Medico general
    3 Adalberto Olmos Pelayo Medico general
    4 Mireya Castillo Vazquez Medico general
    5 Azael Sanches Ortega Medico general
    6 Jesus Tellez Lorencez Medico general
    7 Oscar Cuz Mejia Medico general
    8 Arturo Gonzalez Huerta Medico general
    9 Mirna Games Suarez Medico general
    10 Dafne Botello May Medico general
    1 Lindoro Paredes Juarez Odontologo
    2 Francisco Romero Lima Odontologo
    3 Adalberto Olmos Pelayo Odontologo
    4 Mireya Castillo Vazquez Odontologo
    5 Azael Sanches Ortega Odontologo
    6 Jesus Tellez Lorencez Odontologo
    7 Oscar Cuz Mejia Odontologo
    8 Arturo Gonzalez Huerta Odontologo
    9 Mirna Games Suarez Odontologo
    10 Dafne Botello May Odontologo
    1 Lindoro Paredes Juarez Medico general
    2 Francisco Romero Lima Medico general
    3 Adalberto Olmos Pelayo Medico general
    4 Mireya Castillo Vazquez Medico general
    5 Azael Sanches Ortega Medico general
    6 Jesus Tellez Lorencez Medico general
    7 Oscar Cuz Mejia Medico general
    8 Arturo Gonzalez Huerta Medico general
    9 Mirna Games Suarez Medico general
    10 Dafne Botello May Medico general

    aparece repetido muchas veces

    Estoy haciendo una pagina web donde esten resgistrados los datos de los doctores que atieden a ciertos pacientes y tengo una tabla medico y otra llamada especialidad en mabas quiero hacer una consulta

  10. Ulices permalink

    Disculpa amigo esto me resulto de gran ayudo solo que tengo un select simple donde muestro nombres de medicos que son extraidos de una tabla pero cuando hago consulta a dos tablas me aparecen repetidos los datos del select simple.

    • Haber si entendí, cuando aplicas tu consulta a las tablas te repite los registros resultados?, si es así una solución que se me ocurre es que al hacer la consulta la agrupes por los resultados, algo así: SELECT nombre.tabla1, campo1.tabla2 FROM tabla1,tabla2 GROUP BY nombre.tabla1. Esta solución se me ocurre ahorita al aire, pero si me pones la consulta que utilizas y los resultados que te da, así como los resultados que esperas te puedo ayudar mejor.

Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s

A %d blogueros les gusta esto: