Foros del Web » Programando para Internet » PHP »

Consultando con Inner Join 3 tablas relacionadas!!!

Estas en el tema de Consultando con Inner Join 3 tablas relacionadas!!! en el foro de PHP en Foros del Web. Hola gente, estoy consultando 3 tablas relacionadas por codigos entre si ... La consulta la hace bien, pero lo que necesito es que si se ...
  #1 (permalink)  
Antiguo 29/04/2009, 13:06
Avatar de colote  
Fecha de Ingreso: julio-2008
Ubicación: Rosario - Santa Fe - Argentina
Mensajes: 729
Antigüedad: 15 años, 9 meses
Puntos: 8
Pregunta Consultando con Inner Join 3 tablas relacionadas!!!

Hola gente, estoy consultando 3 tablas relacionadas por codigos entre si ...
La consulta la hace bien, pero lo que necesito es que si se puede poner una consulta del tipo "where cod between $desde and $hasta"
La estoy haciendo asi ...

Código PHP:

$resu=mysql_query("select * from clientes AS c1
INNER JOIN sub_pedidos AS sp1 ON c1.cod_cli=sp1.cod_cli
INNER JOIN piezas AS p1 WHERE sp1.cod_pieza=p1.cod_pieza",$conexion);
while ($rs = mysql_fetch_array($resu)){

$fec_ent_ped = explode("-", $rs['fecha_ent']);
?>

<div class="l1"><?echo $rs['cod_cli']?> - <?echo $rs['razon_soc']?></div>
<div class="l2"><?echo $rs['cod_pieza']?> - <?echo $rs['nombre']?></div>
<div class="l3"><?echo $rs['cantp']?></div>
<div class="l3"><?echo $rs['cant_ent']?></div>
<div class="l3"><?echo $rs['cant_rest']?></div>
<div class="l4"><?echo "$fec_ent_ped[2]/$fec_ent_ped[1]/$fec_ent_ped[0]";?></div>
Y lo otro que me pasa es que cada cliente tiene dentro mas de un pedido, y se me imprime el cliente cada vez que tiene un pedido, como se podra hacer que se imprima solo 1 cliente y todos sus pedidos juntos???

Gracias, Ricardo !!!
__________________
Mail: [email protected]
  #2 (permalink)  
Antiguo 29/04/2009, 13:24
Avatar de SCY-FOX  
Fecha de Ingreso: septiembre-2007
Ubicación: Chile
Mensajes: 139
Antigüedad: 16 años, 7 meses
Puntos: 5
Respuesta: Consultando con Inner Join 3 tablas relacionadas!!!

podria ser asi:

Código PHP:
SELECT FROM clientes AS c1
                INNER JOIN sub_pedidos 
AS sp1 ON c1.cod_cli sp1.cod_cli
                INNER JOIN piezas 
AS p1 WHERE sp1.cod_pieza=p1.cod_pieza AND c1.cod_cli 'codigocliente' 
Estas seleccionando todos los pedidos y piezas de todos los clientes sin decir cual es el código único de cliente que quieres obtener.

Tonses me tinca que tienes que añadir al final el "filtro" en donde te muestre solo el cliente que deseas.

Si te funcina avisas!


edit: Para solucionar el problema de abajo, estás obligado a hacer 2 consultas, porque debes hacer un "loop" de los resultados de la consulta de subpedidos para el cliente único. Yo haría algo asi:

Código PHP:

$resu
=mysql_query("select * from clientes",$conexion);


while (
$rs1 mysql_fetch_array($resu)){

$resu2=mysql_query("select * from sub_pedidos INNER JOIN piezas AS p1 WHERE cod_pieza = p1.cod_pieza AND cod_cli = '".$rs['cod_cli']."'",$conexion);

    while 
$rs2    =    mysql_fetch_array($resu2) {
            echo 
"ACa va la tabla donde te muestra la info del subpedido y sus piezas segun 1 cliente";    
    }
    
    
$fec_ent_ped explode("-"$rs['fecha_ent']);

    echo 
"ACA va la tabla que te muestra el resto de la info de los clientes.";
    
//ahora si quieres mostrar la info de un solo cliente, arriba en el RESU 1 debes ponerle WHERE cod_cli = 'codigocliente'


Última edición por SCY-FOX; 29/04/2009 a las 13:39
  #3 (permalink)  
Antiguo 29/04/2009, 13:43
Avatar de colote  
Fecha de Ingreso: julio-2008
Ubicación: Rosario - Santa Fe - Argentina
Mensajes: 729
Antigüedad: 15 años, 9 meses
Puntos: 8
Respuesta: Consultando con Inner Join 3 tablas relacionadas!!!

Hola SCY-FOX!!!

Tu respuesta me dio un idea, y llegue a la solucion asi :
Código PHP:
$resu=mysql_query("
select * from clientes AS c1
INNER JOIN sub_pedidos AS sp1 ON c1.cod_cli=sp1.cod_cli
INNER JOIN piezas AS p1 ON sp1.cod_pieza=p1.cod_pieza 
where c1.cod_cli between $desde and $hasta
order by sp1.cod_cli,sp1.fecha_ent "
,$conexion); 
Lo que no se es como imprimir solo una vez el cliente, porque me aparece la n cantidad de pedidos que hay

Por ejemplo si ese cliente tiene 5 pedidos, se me imprime 5 veces el cliente, yo quiero que se imprima 1 sola vez y los 5 pedidos de este cliente ...

Como se puede hacer eso ????

Saludos, Ricardo !!!
__________________
Mail: [email protected]
  #4 (permalink)  
Antiguo 29/04/2009, 14:34
Avatar de the_web_saint  
Fecha de Ingreso: mayo-2008
Ubicación: localhost/tierra/america/panama
Mensajes: 1.229
Antigüedad: 15 años, 11 meses
Puntos: 43
Respuesta: Consultando con Inner Join 3 tablas relacionadas!!!

Haz intentado con un Group By?

Saludos
__________________
..::The Saint::..
El pesimista se queja del viento; el optimista espera que cambie; el realista ajusta las velas.
  #5 (permalink)  
Antiguo 30/04/2009, 03:53
Avatar de colote  
Fecha de Ingreso: julio-2008
Ubicación: Rosario - Santa Fe - Argentina
Mensajes: 729
Antigüedad: 15 años, 9 meses
Puntos: 8
Claro, pero me pone un solo pedido por cada cliente, claro que el cliente aparece una sola vez , pero el pedido es unico por cliente de esa manera tambien ... a menos que lo este usando mal.
Como pondrias el group by ?

Saludos, Ricardo ...

Lo que necesito es que por cada cliente me muestre los pedidos de la manera:

cliente1 /
articulo1 / cantidad1
articulo2 / cantidad2
articulo_n / cantidad_n

cliente2 /
articulo1 / cantidad1
articulo2 / cantidad2
articulo_n / cantidad_n

y ahora me lo esta mostrando asi :

cliente1 / articulo1 / cantidad1
cliente1 / articulo2 / cantidad2
cliente2 / articulo1 / cantidad1
cliente2 / articulo2 / cantidad2

Saludos, Ricardo !!!

Alguna manito por ahi ??

Saludos !!!

Holas !!! Alguna idea por ahi ?

Saludos, Ricardo !!!
__________________
Mail: [email protected]

Última edición por GatorV; 04/05/2009 a las 15:55
  #6 (permalink)  
Antiguo 02/05/2009, 08:04
Avatar de the_web_saint  
Fecha de Ingreso: mayo-2008
Ubicación: localhost/tierra/america/panama
Mensajes: 1.229
Antigüedad: 15 años, 11 meses
Puntos: 43
Respuesta: Consultando con Inner Join 3 tablas relacionadas!!!

Creo que consultando primero los clientes y en un ciclo hacer el select de aticulos/cantidad para ese cliente.

Saludos
__________________
..::The Saint::..
El pesimista se queja del viento; el optimista espera que cambie; el realista ajusta las velas.
  #7 (permalink)  
Antiguo 02/05/2009, 10:51
Avatar de colote  
Fecha de Ingreso: julio-2008
Ubicación: Rosario - Santa Fe - Argentina
Mensajes: 729
Antigüedad: 15 años, 9 meses
Puntos: 8
Bien, el tema es que si consulto por un cliente sale bien la consulta, pero si consulto por ejemplo un rango de 100 a 125, me aparecen en el listado los que no tienen pedidos, y eso es lo que no necesito !!!

Se podra hacer algun tipo de consulta asi como que no existe pedido para ese cliente ?

Saludos, Ricardo

Se podra consultar de tipo :
select * from clientes where cod_cli between $desde and $hasta (if existen esos codigos en la tabla sub_pedidos) ?????

Saludos !!!
__________________
Mail: [email protected]

Última edición por GatorV; 04/05/2009 a las 15:55
  #8 (permalink)  
Antiguo 04/05/2009, 15:50
Avatar de the_web_saint  
Fecha de Ingreso: mayo-2008
Ubicación: localhost/tierra/america/panama
Mensajes: 1.229
Antigüedad: 15 años, 11 meses
Puntos: 43
Respuesta: Consultando con Inner Join 3 tablas relacionadas!!!

Puedes colocar el el where un if para comprobar esto, de esta forma si se cumple te los devolvera.

Por ejemplo:(no esta probado, pero esta la idea :P)

Select * from clientes where if(cod_cli BETWEEN '$desde' and '$hasta', 1, 0)=1

Saludos
__________________
..::The Saint::..
El pesimista se queja del viento; el optimista espera que cambie; el realista ajusta las velas.
  #9 (permalink)  
Antiguo 04/05/2009, 17:11
Avatar de SCY-FOX  
Fecha de Ingreso: septiembre-2007
Ubicación: Chile
Mensajes: 139
Antigüedad: 16 años, 7 meses
Puntos: 5
Respuesta: Consultando con Inner Join 3 tablas relacionadas!!!

Puedes usar el codigo que te puse arriba y en caso de no existir registro de subpedidos para dicho cliente, haces que salte el loop interno.

ah y otra cosa, no usar tantos inner join, porque se pajea la base de datos...
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 11:51.