Foros del Web » Programando para Internet » PHP »

como sacar los datos de una consulta de varias tablas

Estas en el tema de como sacar los datos de una consulta de varias tablas en el foro de PHP en Foros del Web. Hola! Necesito sacar ya en pantalla los datos que me devuelve una consulta sql de multiples tablas relacionadas. Al ser tablas relacionadas, me devuelve, para ...
  #1 (permalink)  
Antiguo 06/07/2012, 10:45
Avatar de dryant  
Fecha de Ingreso: agosto-2009
Ubicación: Malaga, Ceuta, España....
Mensajes: 283
Antigüedad: 14 años, 7 meses
Puntos: 10
como sacar los datos de una consulta de varias tablas

Hola!
Necesito sacar ya en pantalla los datos que me devuelve una consulta sql de multiples tablas relacionadas.
Al ser tablas relacionadas, me devuelve, para un mismo cliente todos sus pedidos y me lo devuelve de esta forma:

Cita:
cliente...| pedido numero. | direccion completa |
-------.|--------------|------------------|
arturo.....| ................1904 | c/ solete n.7...........|
arturo.....| ................2312 | c/ solete n.7...........|
arturo.....| ................0460 | c/ solete n.7...........|
Manolo...| ................5305 | c/ perejil n.1000....|
Manolo...| ................1035 | c/ perejil n.1000....|
Para sacar los datos en pantalla hago un mysql fetch array como el siguiente:
Código PHP:
while ($fila=mysql_fetch_array($peticion))
        {
         echo 
$fila['nombreCliente']."<br>";
         echo 
$fila['numPedido']."<br>";
         echo 
$fila['direccion']."<br>";
        } 
Pero el resultado que me devuelve auqnue ya os podeis imaginar cual es este

Cita:
arturo
1904
c/ solete n.7
arturo
2312
c/ solete n.7
arturo
0460
c/ solete n.7
Manolo
5305
c/ perejil n.1000
Manolo
1035
c/ perejil n.1000
Lo que necesito es que me saque todos los pedidos agrupados entre el nombre y la direccion de la sigeuiente manera

Cita:
arturo
1904
2312
0460
c/solete n.7
------------------
Manolo
5305
1035
c/ perejil n.1000
------------------
Me han dado una solucion, pero no acabo de dar con el toque final.
Se trata de poner un contador y con un if de la siguiente manera:

Código PHP:
$nombre="";

echo 
"<hr>";
while (
$fila=mysql_fetch_array($peticion))
        {
        if ( 
$nombre!= $fila ['nombreCliente'])
{
       
        echo 
$fila ['nombreCliente']."<br>";
        echo 
$fila ['direccion']."<br>";
        
$nombre$fila ['nombreCliente'];
        }
        
         echo 
$fila['numPedido']."<br>";
        
        }
echo 
"<hr>"
Pero entonces me saca nombre, direccion, y luego los pedidos, y necesito que los pedidos esten entre el nombre y la direccion. Puede parecer una tonteria, lo de la posicion, pero tiene su razon de ser.

Alguien sabe como terminar de conseguir esto?

No tiene porque ser con el contador y si hay alguna forma mas efectiva que con el caontador me vale

Un saludo y gracias a todos!
__________________
Tecnología y tutoriales
  #2 (permalink)  
Antiguo 06/07/2012, 10:49
Avatar de informacionsys  
Fecha de Ingreso: mayo-2011
Ubicación: Bogota D.C
Mensajes: 793
Antigüedad: 12 años, 10 meses
Puntos: 76
Respuesta: como sacar los datos de una consulta de varias tablas

muestramos la estructura de las dos tablas.
  #3 (permalink)  
Antiguo 06/07/2012, 10:52
Avatar de rodrigo791  
Fecha de Ingreso: noviembre-2009
Ubicación: Uruguay
Mensajes: 1.339
Antigüedad: 14 años, 4 meses
Puntos: 168
Respuesta: como sacar los datos de una consulta de varias tablas

Si queres sacar datos de mas de una tabla, tenes que usar lo que se conoce como JOIN, busca sobre esto
  #4 (permalink)  
Antiguo 06/07/2012, 12:03
Colaborador
 
Fecha de Ingreso: marzo-2008
Ubicación: Sabadell
Mensajes: 4.897
Antigüedad: 16 años
Puntos: 574
Respuesta: como sacar los datos de una consulta de varias tablas

Hola de nuevo.... el pacto era que le dabas dos vueltas....


Código PHP:
Ver original
  1. $nombre="";
  2. $direccion="";
  3. $contador=0;
  4. echo "<hr>";
  5. while ($fila=mysql_fetch_array($peticion)){
  6.         if ( $nombre!= $fila ['nombreCliente']){
  7.                   if($contador!=0){
  8.                          echo $direccion."<br>";
  9.                          echo "<hr>";
  10.                   }
  11.                   echo $fila ['nombreCliente']."<br>";
  12.                   $direccion=$fila ['direccion'];
  13.                   $contador++;
  14.                   $nombre= $fila ['nombreCliente'];
  15.         }
  16.          echo $fila['numPedido']."<br>";
  17.  }

Si?
__________________
Quim
--------------------------------------------------
Ayudar a ayudar es una buena práctica!!! Y da buenos resultados.
  #5 (permalink)  
Antiguo 06/07/2012, 12:09
Avatar de dryant  
Fecha de Ingreso: agosto-2009
Ubicación: Malaga, Ceuta, España....
Mensajes: 283
Antigüedad: 14 años, 7 meses
Puntos: 10
Respuesta: como sacar los datos de una consulta de varias tablas

Hola de nuevo: Gracias por contestar

Cita:
muestramos la estructura de las dos tablas.
Esta es

tabla clientes: idCliente (int, primary key, AI), nombre (varchar, 150), direccion (varchar 200)
tabla pedidos: idPedido (int, primary key, AI),idCliente (int, index)

Cita:
Si queres sacar datos de mas de una tabla, tenes que usar lo que se conoce como JOIN, busca sobre esto
La consulta SQL esta bien hecha con un INNER JOIN. de todas formas te dejo todo el codigo para que lo veas:
Código PHP:
<?php
$conexion
mysql_connect("localhost","root","root");
if(!
$conexion)
{
die (
'No se ha conectado: '.mysql_error());
} echo 
"Te has conectado correctamente<br>";

mysql_select_db("empresa",$conexion);

$peticion=mysql_query("SELECT * 
FROM `clientes` INNER JOIN `pedidos` ON `clientes`.idCliente=`pedidos`.idCliente
"
);


$nombre="";

echo 
"<hr>";
while (
$fila=mysql_fetch_array($peticion))
        {
         echo 
$fila['nombreCliente']."<br>";
         echo 
$fila['idPedido']."<br>";
         echo 
$fila['direccion']."<br>";
        }  


mysql_close($conexion);

?>
Con este codigo me sale como dije antes de la siguiente manera:
Cita:
arturo
1904
c/ solete n.7
arturo
2312
c/ solete n.7
arturo
0460
c/ solete n.7
Manolo
5305
c/ perejil n.1000
Manolo
1035
c/ perejil n.1000
Alguna idea?

Gracias por la ayuda !
__________________
Tecnología y tutoriales
  #6 (permalink)  
Antiguo 06/07/2012, 12:11
Avatar de dryant  
Fecha de Ingreso: agosto-2009
Ubicación: Malaga, Ceuta, España....
Mensajes: 283
Antigüedad: 14 años, 7 meses
Puntos: 10
Respuesta: como sacar los datos de una consulta de varias tablas

Cita:
Iniciado por quimfv Ver Mensaje
Hola de nuevo.... el pacto era que le dabas dos vueltas....


Código PHP:
Ver original
  1. $nombre="";
  2. $direccion="";
  3. $contador=0;
  4. echo "<hr>";
  5. while ($fila=mysql_fetch_array($peticion)){
  6.         if ( $nombre!= $fila ['nombreCliente']){
  7.                   if($contador!=0){
  8.                          echo $direccion."<br>";
  9.                          echo "<hr>";
  10.                   }
  11.                   echo $fila ['nombreCliente']."<br>";
  12.                   $direccion=$fila ['direccion'];
  13.                   $contador++;
  14.                   $nombre= $fila ['nombreCliente'];
  15.         }
  16.          echo $fila['numPedido']."<br>";
  17.  }

Si?
Hola de nuevo Quim!!

Tu mensaje ha llegado mientras que escribia el anterior mensaje!
Voy a probar como dices y ahora te cuento!
__________________
Tecnología y tutoriales
  #7 (permalink)  
Antiguo 06/07/2012, 12:38
Colaborador
 
Fecha de Ingreso: marzo-2008
Ubicación: Sabadell
Mensajes: 4.897
Antigüedad: 16 años
Puntos: 574
Respuesta: como sacar los datos de una consulta de varias tablas

Deberías agregar

ORDER BY nombreCliente,numPedido

a la query para asegurar que llegan por orden.... la solución se basa en eso.
__________________
Quim
--------------------------------------------------
Ayudar a ayudar es una buena práctica!!! Y da buenos resultados.
  #8 (permalink)  
Antiguo 06/07/2012, 12:41
Avatar de dryant  
Fecha de Ingreso: agosto-2009
Ubicación: Malaga, Ceuta, España....
Mensajes: 283
Antigüedad: 14 años, 7 meses
Puntos: 10
Respuesta: como sacar los datos de una consulta de varias tablas

Cita:
Iniciado por quimfv Ver Mensaje
Hola de nuevo.... el pacto era que le dabas dos vueltas....


Código PHP:
Ver original
  1. $nombre="";
  2. $direccion="";
  3. $contador=0;
  4. echo "<hr>";
  5. while ($fila=mysql_fetch_array($peticion)){
  6.         if ( $nombre!= $fila ['nombreCliente']){
  7.                   if($contador!=0){
  8.                          echo $direccion."<br>";
  9.                          echo "<hr>";
  10.                   }
  11.                   echo $fila ['nombreCliente']."<br>";
  12.                   $direccion=$fila ['direccion'];
  13.                   $contador++;
  14.                   $nombre= $fila ['nombreCliente'];
  15.         }
  16.          echo $fila['numPedido']."<br>";
  17.  }

Si?
Quim, en el otro mensaje que me diste en el otro hilo, no entendi lo de darle dos vueltas, entendi que era hacer un while dentro de un while.

Con respecto al codigo que me indicaslo he analizado, y he tenido que crear incluso un diagrama de flujo para entenderlo (soy un poco novato todavia para entenderlo sin el diagrama), y despues de mucho darle vueltas sigo sin encontrar un pequeño fallo que tiene, y es que en el ultimo cliente no imprime la direccion y la linea....
Como seria?
__________________
Tecnología y tutoriales
  #9 (permalink)  
Antiguo 06/07/2012, 12:48
Colaborador
 
Fecha de Ingreso: marzo-2008
Ubicación: Sabadell
Mensajes: 4.897
Antigüedad: 16 años
Puntos: 574
Respuesta: como sacar los datos de una consulta de varias tablas

Cierto NUNCA me acuerdo del ultimo!!!!

Cuan do la veas diras que era obvia!!!!

Recuerda lo del ORDER BY

Código PHP:
Ver original
  1. $nombre="";
  2. $direccion="";
  3. $contador=0;
  4. echo "<hr>";
  5. while ($fila=mysql_fetch_array($peticion)){
  6.         if ( $nombre!= $fila ['nombreCliente']){
  7.                   if($contador!=0){
  8.                          echo $direccion."<br>";
  9.                          echo "<hr>";
  10.                   }
  11.                   echo $fila ['nombreCliente']."<br>";
  12.                   $direccion=$fila ['direccion'];
  13.                   $contador++;
  14.                   $nombre= $fila ['nombreCliente'];
  15.         }
  16.          echo $fila['numPedido']."<br>";
  17.  }
  18.  echo $direccion."<br>";
  19.  echo "<hr>";

Basicamente lo que hace es reservar la dirección para imprimirla antes del siguiente cliente... y claro despues del ultimo pedido del cliente actual....
__________________
Quim
--------------------------------------------------
Ayudar a ayudar es una buena práctica!!! Y da buenos resultados.
  #10 (permalink)  
Antiguo 06/07/2012, 12:55
Avatar de dryant  
Fecha de Ingreso: agosto-2009
Ubicación: Malaga, Ceuta, España....
Mensajes: 283
Antigüedad: 14 años, 7 meses
Puntos: 10
Respuesta: como sacar los datos de una consulta de varias tablas

Vaya.... Pues si que era obvia si!
Yo me estaba complicando la vida pensando en como volver a llegar al if para imprimir la direccion.... en fin la falta de experiencia!

Por cierto porque dices que es importante en Order BY ?
La solucion que me has dado funciona bien sin el Order BY.... lo he probado y me ha dado todos los clientes con sus pedidos y sus direcciones...
Sin embargo tu dices que la solucion se basa en el Order by ¿Porque?
__________________
Tecnología y tutoriales
  #11 (permalink)  
Antiguo 06/07/2012, 12:58
Avatar de patriciomase  
Fecha de Ingreso: abril-2012
Ubicación: Mar del Plata
Mensajes: 323
Antigüedad: 11 años, 11 meses
Puntos: 34
Respuesta: como sacar los datos de una consulta de varias tablas

para hacerlo como corresponde, deberias hacer que [numPedido] sea un arreglo con todos los pedidos. Me explico?
Código PHP:
Ver original
  1. $arrayClientes['nombrecliente'] = 'pepito';
  2. $arrayClientes['numPedidos'] = array(// y aca metes los pedidos);
al tener la estructura armada correctamente al momento de imprimir por pantalla no tenes dramas de que se te repiten los nombres ni nada
  #12 (permalink)  
Antiguo 06/07/2012, 13:04
Avatar de dryant  
Fecha de Ingreso: agosto-2009
Ubicación: Malaga, Ceuta, España....
Mensajes: 283
Antigüedad: 14 años, 7 meses
Puntos: 10
Respuesta: como sacar los datos de una consulta de varias tablas

Cita:
Iniciado por patriciomase Ver Mensaje
para hacerlo como corresponde, deberias hacer que [numPedido] sea un arreglo con todos los pedidos. Me explico?
Código PHP:
Ver original
  1. $arrayClientes['nombrecliente'] = 'pepito';
  2. $arrayClientes['numPedidos'] = array(// y aca metes los pedidos);
al tener la estructura armada correctamente al momento de imprimir por pantalla no tenes dramas de que se te repiten los nombres ni nada
Hola Patriciomase!
No entiendo a que te refieres. Podrias ser mas explicito por favor?
Gracias!
__________________
Tecnología y tutoriales
  #13 (permalink)  
Antiguo 09/07/2012, 07:05
Colaborador
 
Fecha de Ingreso: marzo-2008
Ubicación: Sabadell
Mensajes: 4.897
Antigüedad: 16 años
Puntos: 574
Respuesta: como sacar los datos de una consulta de varias tablas

Cita:
Por cierto porque dices que es importante en Order BY ?
PRIMERO
Sabes que en Sql el orden de los registros no siempre es el mismo la unica manera de asegurar que una consulta va a retornar los registros en un orden concreto es especificando un ORDER BY.

SEGUNDO
El script que te he propuesto depende de que los clientes y sus pedidos lleguen ordenados, si por ejemplo la query retorna el 5 pedidos del cliente1 luego 5 del clienteX y luego 5 mas del cliente1, el resultado del script no serà el esperado. Es decir solo funciona si estas seguro que van a llegar TODOS los pedidos de un cliente consecutivamente.
__________________
Quim
--------------------------------------------------
Ayudar a ayudar es una buena práctica!!! Y da buenos resultados.

Etiquetas: mysql, sql, tabla, tablas
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 05:57.