Consultas en php y mysql para dos o mas tablas
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
hola genaro: me gustaria saber si pudistes terminar el sistema de gestion del centro educativo
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?
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);
?>
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.
Muy bien 🙂 si funciona!! gracias
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’
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)
si quieres te paso por correo lo que estoy haciendo paara ver si me puedes echar la mano por favor
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
Si esta bien mándalo a mi e-mail para ver si te puedo ayudar, artesan1@hotmail.com solo ponle en el asunto: programarenphp para ubicarte pronto porfa.
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.