Foros del Web » Programando para Internet » PHP »

¿como hago dos consultas en una?

Estas en el tema de ¿como hago dos consultas en una? en el foro de PHP en Foros del Web. Hola amigos, resulta que necesito hacer dos consultas al mismo tiempo: Tengo dos tablas: Campos de la tabla "graficos_nombres": id_graficos_nombres | id_graficos | nombre | ...
  #1 (permalink)  
Antiguo 24/02/2011, 07:12
Avatar de cristian_cena
Colaborador
 
Fecha de Ingreso: junio-2009
Mensajes: 2.244
Antigüedad: 14 años, 10 meses
Puntos: 269
¿como hago dos consultas en una?

Hola amigos, resulta que necesito hacer dos consultas al mismo tiempo:

Tengo dos tablas:

Campos de la tabla "graficos_nombres":
id_graficos_nombres | id_graficos | nombre | visible

Campos de la tabla "graficos_grupos":
id_graficos_grupos | id_graficos | id_graficos_nombres | id_graficos_categorias | grupo


----------------------------------------------------------------------------------------------
Actualmente para listar los registros de ambas tablas hago lo siguiente:

Código PHP:
Ver original
  1. //recibo un valor via get
  2. $id_graficos=$_GET['id_graficos'];
  3.  
  4. //realizo la primer consulta
  5. $consulta1="SELECT * FROM graficos_nombres WHERE id_graficos=$id_graficos";
  6.  
  7. //listo los registros de la tabla "graficos_nombres"
  8. while($registros=mysql_fetch_array($consulta1))
  9. {
  10. //dentro del while creo la variable $id_graficos_nombres que uso en la 2da consulta
  11. $id_graficos_nombres=$registros['id_graficos_nombres'];
  12.  
  13. //realizo la segunda consulta
  14. $consulta2="SELECT * FROM graficos_grupos WHERE id_graficos_nombres=$id_graficos_nombres";
  15.  
  16. //listo los registros de la tabla "graficos_grupos"
  17. while($reg=mysql_fetch_array($consulta2))
  18. {
  19. ...
  20. }
  21. }


pero esto esta mal porque lo que necesito es listar los registros de ambas tablas (con sus correspondientes where) dentro del mismo while y no generar dos while como estoy haciendo.

¿Existe alguna manera de hacer las dos consultas en una sola? Leí sobre JOIN pero parece que no es lo que necesito.

Desde ya les agradezco por su ayuda. Un saludo.
  #2 (permalink)  
Antiguo 24/02/2011, 07:23
Avatar de Patriarka  
Fecha de Ingreso: enero-2011
Ubicación: Moreno, Buenos Aires, Argentina
Mensajes: 2.851
Antigüedad: 13 años, 2 meses
Puntos: 288
Respuesta: ¿como hago dos consultas en una?

Hola,
pueden ser dos soluciones diferentes segun tu necesidad.

1- si usas join te a devolver todos los campos de las dos tablas.
2- quizas, si tenes una relacion de 1 a N , podriamos hacer dos while
3- hay campos que se repiten con el mismo nombre en las dos tablas: id_graficos | id_graficos_nombres
que se repita uno no hay problema, pero cuando hay dos o mas campos que se repiten quiere decir que esta mal diseñada la tabla, por que indica que queres llegar al mismo lugar por dos caminos distintos.

decime bien lo que queres listar y lo hacemos.
  #3 (permalink)  
Antiguo 24/02/2011, 07:48
Avatar de cristian_cena
Colaborador
 
Fecha de Ingreso: junio-2009
Mensajes: 2.244
Antigüedad: 14 años, 10 meses
Puntos: 269
Respuesta: ¿como hago dos consultas en una?

Hola patriarka, gracias por responder.
en este link puedes ver el codigo sql completo.

aqui el codigo completo del archivo php:

Código PHP:
$query = mysql_query("SELECT * FROM graficos_nombres WHERE id_graficos=$id_graficos"); 
            while($reg=mysql_fetch_array($query)){
            $id_graficos_nombres=$reg['id_graficos_nombres'];
            ?>

ESTE FORMULARIO ENVIA LOS DATOS A UN ARCHIVO QUE HACE LOS UPDATE EN LAS TABLAS

             <form action="procesos/edita_carga_line.php" method="post"> 
              <div id="adjuntos" style="overflow:hidden;">
                <div class="archivo" style="width:160px;"> 
                    <p>Nombre del grupo:</p>
                    <input type="text" name="nombre_grupo" id="nombre_grupo" value="<?php echo $reg['nombre'];?>"/>  
                    <br />
                    <label for="visible" class="label_inline">Visible: </label>
                    <?php
                    
if($reg['visible']=='true'){$checked="checked=\"checked\"";}else{$checked=" ";}
                    
?>
                    <input type="checkbox" name="visible" id="visible" value="1" <?php echo $checked;?>/>          
                    <br /><br /><hr />
                    <?php
                    $query 
mysql_query("SELECT * FROM graficos_categorias WHERE id_graficos=$id_graficos"); 
                    while(
$registros=mysql_fetch_array($query)){
                    
?>
aqui el problema:
marco en rojo el valor correspondiente al campo id_graficos_nombres de la tabla graficos_nombres
Para obtener este valor tantas veces como categorias halla me veo obligado a hacer otra consulta y otro while.

<!--
¿Podre hacer que esta consulta:
'SELECT * FROM graficos_grupos WHERE id_graficos_nombres=$id_graficos_nombres'
venga junto con esta otra?:
'SELECT * FROM graficos_nombres WHERE id_graficos=$id_graficos'
-->

<p><?php echo utf8_encode($registros['categoria']);?>: </p>
<input type="text" name="grupo_datos[]" value="aqui"/>
<input type="hidden" name="id_graficos_categorias[]" value="<?php echo $registros['id_graficos_categorias'];?>"/>

Código PHP:
        <?php
                    
}
                    
?>
                </div>
              </div>
              <br />
              <div id="zona_save">
                  <input type="hidden" name="id_graficos" value="<?php echo $id_graficos;?>"/>
                  <input class="aplicar" type="submit" value="aplicar"/>
              </div>
            </form>
            <?php
            
}
            
?>
  #4 (permalink)  
Antiguo 24/02/2011, 09:21
 
Fecha de Ingreso: julio-2010
Mensajes: 275
Antigüedad: 13 años, 9 meses
Puntos: 21
Respuesta: ¿como hago dos consultas en una?

supongo que este tema no es de este foro...

Sintaxis para los joins

"SELECT a.*,b.* FROM tabla1 as a, tabla 2 as b WHERE a.id=b.id"

Si esta comparando variables que obtienes de un post o de una variable php, colocas la condición en el Where

"SELECT a.*,b.* FROM tabla1 as a, tabla 2 as b WHERE a.id='$_POST['id]'"
  #5 (permalink)  
Antiguo 24/02/2011, 19:24
Avatar de cristian_cena
Colaborador
 
Fecha de Ingreso: junio-2009
Mensajes: 2.244
Antigüedad: 14 años, 10 meses
Puntos: 269
Respuesta: ¿como hago dos consultas en una?

Hola muchachos, gracias a ambos por las respuestas.
Encontre la solución y la posteo por si sirve a alguien que pase por aqui.


Código PHP:
Ver original
  1. //unimos las dos tablas por un campo que tienen en común
  2. $query = mysql_query("
  3.     SELECT * FROM graficos_categorias
  4.     INNER JOIN graficos_grupos
  5.     ON graficos_categorias.id_graficos_categorias = graficos_grupos.id_graficos_categorias
  6. ");
  7.  
  8. //listamos los registros
  9. while($reg=mysql_fetch_array($query)){
  10.     echo $reg['categoria']."<br />"; // el campo categoria pertenece a la tabla graficos_categorias
  11.     echo $reg['grupo']; // el campo grupo pertenece a la tabla graficos_grupos
  12. }

Saludos.

P/D: si el que lee esta tan perdido como lo estube yo, le será util leer este artículo.

Etiquetas: dos
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 00:39.