Consultar en dos tablas
Hola! Pregunto en esta oportunidad por un problema que me surge al usar mysql_query para unir dos tablas ¿Qué estoy haciendo mal?
personas_tb tiene --> id_persona y nombreusuario
proyecto_tb tiene --> codigo_proy, titulo, alumno, estado
COINCIDEN nombreusuario = alumno
pues bien, quiero obtener el resultado de alumnos que tienen cierto estado (Asignado, Finalizado, Publicado)
Lo he estado haciendo tal que así, pero...
$result = mysql_query("SELECT codigo_proy, titulo, alumno, id_persona, nombreusuario FROM proyecto_tb, personas_tb WHERE alumno = nombreusuario AND estado='$_GET[muestra]' ",$link) or die(mysql_error());
el resultado que obtengo es un listado de todas las personas en mi base de datos y el campo de proyecto (titulo y código_proy) sólo en aquellos que mi variable GET coincide con el estado....
en definitiva, cómo quito los resultados que no son mi variable?
¡gracias!
Cloudstudio
Me alegro que te funcione, para cualquier cosa aqui estamos
markshock
Ojito con los INNER JOIN, tienen la peculiaridad de que solo te devolverá los campos que cumplan la comparación, si quieres un listado de todos los campos indistintamente que cumplan la condicion o no, usa el LEFT JOIN.
Suele ser un error bastante común cuando se empieza a usar JOIN intentar obtener un listado de la unión de 2 tablas y que te vuelvas loco intentando averiguar por que no te devuelve nada... :P
Por cierto, unos consejitos....
1.- Intenta evitar los "SELECT * " cargan mucho las consultan y realmente nunca necesitas todos los campos de una tabla.
2.- Los campos que usas como "estado" puedes usar o bien un boolean (true/false) o si vas a tener mas de 2 estados puedes usar un campo (Tynint o enum) de esta manera puedes asociar número a estados 1- OK / 2- Offline / 3 - Stand By ....
3.- Intenta trabajar con ID's en las tablas, es mas rápido buscar id_alumno = 3 que alumno = "Jose fernandez de las mercedes"
Saludos y animo socio!
skuareisnext
ahhh!!! pesadilla!!
He intentado uno de los tipos de join,
$result = mysql_query("SELECT * FROM personas_tb INNER JOIN proyecto_tb ON (personas_tb.nombreusuario = proyecto_tb.alumno AND proyecto_tb.estado = 'Finalizado')",$link) or die(mysql_error());
Me devuelve una lista de TODAS mis personas y en aquellos cuyo estado es finalizado les pone su titulo de proyecto
el código completo es..
<?php
$result = mysql_query("SELECT * FROM personas_tb INNER JOIN proyecto_tb ON (personas_tb.nombreusuario = proyecto_tb.alumno AND proyecto_tb.estado = 'Finalizado')",$link) or die(mysql_error());
$i=0;
while($row = mysql_fetch_array($result)) {
$lid_persona = $row['id_persona'];
$lnombreusuario = $row['nombreusuario'];
$lcodigo_proy = $row['codigo_proy'];
$ltitulo = $row['titulo'];
echo "$lid_persona - $lnombreusuario - $ltitulo - $lcodigo_proy";
}
mysql_free_result($result);
?>
He intentado también lo siguiente - sin resultados:
<?php
$result = mysql_query("SELECT * FROM proyecto_tb WHERE estado = 'Finalizado'",$link) or die(mysql_error());
$i=0;
while($row = mysql_fetch_array($result)) {
$lalumno = $row['alumno'];
$lcodigo_proy = $row['codigo_proy'];
$ltitulo = $row['titulo'];
$result1 = mysql_query("SELECT * FROM personas_tb WHERE nombreusuario = '$lalumno'",$link) or die(mysql_error());
$row = mysql_fetch_array($result1);
$lid_persona = $row['id_persona'];
mysql_free_result($result1);
echo "$lid_persona - $lalumno - $titulo - $lcodigo_proy";
}
mysql_free_result($result);
?>
CORRECCIÓN!!!!
=) muchas gracias, con este último ejemplo funciona
Cloudstudio
$result = mysql_query("SELECT * FROM proyecto_tb WHERE alumno = nombreusuario AND estado='$_GET[muestra]' ",$link)
$result 1= mysql_query("SELECT * FROM personas_tb WHERE alumno = nombreusuario AND estado='$_GET[muestra]' ",$link)
Repites la sentencia y listo.
Marcos MPC
En realidad sí se pueden unir dos tablas como lo ha hecho skuareisnext (si no lo filtras con un WHERE te daría todas las combinaciones posibles entre las filas de las dos tablas). En la consulta no veo nada que cante que está mal, lo mismo conviene que identifiques en el WHERE a qué tabla corresponde cada campo (proyecto_tb.alumno en vez de alumno) pero ayer mismo yo monté una consulta así con tres tablas y funcionó. Era tal que así:
"SELECT id, nombre, apellido1, poblacion, comunidad FROM contactos AS c, poblaciones AS p, CCAA WHERE c.id_poblacion=p.id_poblacion AND p.id_CCAA=CCAA.id_CCAA AND id=".$_GET["id"]
De todas formas lo mejor por eficiencia y sencillez es hacer un JOIN como dice Cuviline.
skuareisnext
puedo usar dos querys?
sería un query con un while y dentro del while otro query?
Cloudstudio
Para seleccionar resultados de 2 tablas, no puedes separarlos con una , ( coma)
Tienes que utilizar la setencia JOIN, http://es.wikipedia.org/wiki/Join es sencilla de usar de todos modos si no te aclaras siempre puedes optar por hacer 2 querys.