Foros Programación Servidor

Consultar en dos tablas

7 7 Respuestas Viernes 15 de enero, 2010
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!
Registrado desde 27/05/04
Número de posts: 70
  • Avatar de Cloudstudio Cloudstudio Registrado desde 05/05/09 / Número de posts: 537
    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.

    cloudstudio.es@gmail.com

    www.cloudstudio.es
    psd a html
    Publicado hace 2 años
  • Avatar de skuareisnext skuareisnext Registrado desde 27/05/04 / Número de posts: 70
    puedo usar dos querys?

    sería un query con un while y dentro del while otro query?
    Publicado hace 2 años
  • Avatar de Marcos MPC Marcos MPC Registrado desde 10/10/08 / Número de posts: 56
    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.
    Publicado hace 2 años
  • Avatar de Cloudstudio Cloudstudio Registrado desde 05/05/09 / Número de posts: 537
    $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.
    cloudstudio.es@gmail.com

    www.cloudstudio.es
    psd a html
    Publicado hace 2 años
  • Avatar de skuareisnext skuareisnext Registrado desde 27/05/04 / Número de posts: 70
    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
    Publicado hace 2 años
  • Avatar de markshock markshock Registrado desde 21/03/05 / Número de posts: 780
    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!
    Desarrollo web, servicios integrales en internet

    Work: http://www.estadoactivo.com
    Yo: http://www.marctorres.es
    Blog: http://www.marc-torres.com
    Publicado hace 2 años
  • Avatar de Cloudstudio Cloudstudio Registrado desde 05/05/09 / Número de posts: 537
    Me alegro que te funcione, para cualquier cosa aqui estamos
    cloudstudio.es@gmail.com

    www.cloudstudio.es
    psd a html
    Publicado hace 2 años