Foros del Web » Programando para Internet » PHP »

While dentro de otro while

Estas en el tema de While dentro de otro while en el foro de PHP en Foros del Web. Holaaa, tengo un gran problema que no he podido solucionar y la verdad es que ya mi cerebro no da para mas (ademas que mi ...
  #1 (permalink)  
Antiguo 29/05/2014, 23:07
 
Fecha de Ingreso: febrero-2013
Ubicación: Ensenada BC, Mexico.
Mensajes: 5
Antigüedad: 11 años, 1 mes
Puntos: 0
While dentro de otro while

Holaaa, tengo un gran problema que no he podido solucionar y la verdad es que ya mi cerebro no da para mas (ademas que mi nivel de programacion es bastante malo )
El caso es el siguiente, tengo un sistema donde se agregan papeletas de venta (a la venta se le denomina party o parties) por producto, donde la papeleta tiene los datos de la persona que realiza la compra y los productos que compra.

Los datos de la venta estan en una tabla llamada parties
parties:
idparties, anfitriona, fecha


Los datos de la persona se guardan en una tabla que se llama papeletas

papeletas:
idparties, idpapeleta, nombre, direccion, ciudad, telefono

y los datos de lo que compro esa persona se guardan en otra tabla que se llama papeleta_articulos

papeleta_articulos:
idparties, idpapelta, cantidad, producto, precio, subtotal

Bien ahora lo que tengo que hacer es que se muestre la papeleta con los nombres de la presona y los articulos que compro.

Estas son las consultas que realizo (se que son grandes y tal vez no sea lo ideal pero como les digo mi nivel de programacion no es muy bueno, por no decir que n se programar u.u)
Las consultas las hago por separado, puesto que puede haber una papeleta con 1 solo articulo, o puede haber una papeleta con 5 articulos, y si hago todo junto si una papeleta tiene 5 articulos me repetira 5 veces los datos

$query="SELECT parties.idparties, parties.anfitriona, parties.fecha, papeletas.idparties, papeletas.idpapeleta, papeletas.nombre, papeletas.direccion, papeletas.ciudad, papeletas.telefono
FROM parties, papeletas
WHERE parties.idparties = papeletas.idparties
AND parties.idparties = '$idparties'";
$resultado=mysql_query($query);

$query1="SELECT parties.idparties, parties.anfitriona, parties.fecha, papeletas.idparties, papeletas.idpapeleta, papeleta_articulos.idparties, papeleta_articulos.idpapeleta_a, papeleta_articulos.cantidad, papeleta_articulos.producto, papeleta_articulos.precio, papeleta_articulos.subtotal
FROM parties, papeletas, papeleta_articulos
WHERE parties.idparties = papeletas.idparties
AND papeletas.idpapeleta = papeleta_articulos.idpapeleta_a
AND parties.idparties = '$idparties'";
$resultado1=mysql_query($query1);

y mi codigo php es el siguiente:
Código PHP:
while($row=mysql_fetch_array($resultado)){
        
$idpapeleta=$row['idpapeleta'];
        
$nombre=$row['nombre'];
        
$direccion=$row['direccion'];
        
$ciudad=$row['ciudad'];
        
$telefono=$row['telefono'];
    
    echo
"<div id='contenedor_papeleta' style='margin-left:10px; color:blue; float:left;'>";
    echo
"<div style='border: 1px solid blue; width:350px; height:600px; padding:20px;  margin-bottom:20px;'>";
    echo
"<div style='margin-left:80px;'>";
    echo
"<img style='width:150px; float:left;' src='images/Stanley.gif'>";
    echo
"</div>";
    
    echo
"<div style='clear:both; margin-left:34px;'><textarea style=' padding:10px; border: 1px solid blue;' name='anfitriona' rows='5' cols='30' disabled='true' >".$anfitriona."</textarea></div><br>";
    echo
"<div style='margin-left:90px;'>Your Stanley Representative</div><br>";
    echo
"<div style='margin-bottom:20px; margin-left:30px;'>";
    echo
"<div style='display:none;'><input type='text' value=".$idpapeleta."><br></div>";
    echo
"Name: <input type='text' size='33px;' name='nombre' disabled='true' value=".$nombre."><br>";
    echo
"Street:<input type='text' size='33px;' name='calle' disabled='true' value=".$direccion."><br>";
    echo
"City:&nbsp &nbsp <input type='text' size='33px;' name='ciudad' disabled='true' value=".$ciudad."><br>";
    echo
"Phone:<input type='text' size='33px;' name='telefono' disabled='true' value=".$telefono."><br>";
    echo
"</div>";
    
    echo
"<div class='contenedor-fila' style='text-align:center; font-weight:bold;'>";
     echo
"<div class='contenedor-columna_factura'>";
    echo
"<em>Qty</em>";
    echo
"</div>";

        echo
"<div class='contenedor-columna_factura'>";
         echo
"<em>Item</em>";
        echo
"</div>";

        echo
"<div class='contenedor-columna_factura'>";
        echo
"<em>Price</em>";
        echo
"</div>";
        
        echo
"<div class='contenedor-columna_factura'>";
        echo
"<em>Subt.</em>";
        echo
"</div>";
        
    echo
"</div>";
    
    
    

        
//PRIMERA FILAAAAAAA
        
        
while($row=mysql_fetch_array($resultado1)){
        
$cantidad=$row['cantidad'];
        
$producto=$row['producto'];
        
$precio=$row['precio'];
        
$subtotal=$row['subtotal'];
                
$idpapeleta_a=$row['papeleta'];

        
        
        echo
"<div class='contenedor-columna_factura' style='float:left;'>";
        echo
"<input type='text'  name='Can_1' id='Can_1' disabled='true' size='1px' value=".$cantidad." >";
         echo
"</div>";

        echo
"<div class='contenedor-columna_factura'>";
        echo
"<input type='text'  name='Des_1'  disabled='true' size='30px' value=".$producto." >";
         echo
"</div>";
         
         echo
"<div class='contenedor-columna_factura'>";
        echo
"<input type='text'  name='Pre_1' id='Pre_1' disabled='true' size='3px' value=".$precio." >";
         echo
"</div>";
         
         echo
"<div class='contenedor-columna_factura'>";
        echo
"<input type='text'  name='Sub_1' id='Sub_1' disabled='true' size='3px' value=".$subtotal.">";
         echo
"</div>";
        
        }
         
       echo
"<div style='clear:both; float:right; margin-right:3px;' id='SUBTOTAL'>";
        echo
"<div class='contenedor-columna_factura' style='padding:5px; width:50px;'>";
        echo
"<em>Subtotal</em>";
        echo
"</div>";
        echo
"<div class='contenedor-columna_factura'>";
        echo
"<input type='text'  name='subtotal' id='subtotal' disabled='true' size='3px'/>";
         echo
"</div>";    
         echo
"</div>";
         
         echo
"<div style='clear:both; float:right; margin-right:3px;' id='TOTAL'>";
        echo
"<div class='contenedor-columna_factura' style='padding:5px; width:50px;'>";
        echo
"<em>Total</em>";
        echo
"</div>";
        echo
"<div class='contenedor-columna_factura'>";
        echo
"<input type='text'  name='total' id='total' size='3px' disabled='true' />";
         echo
"</div>";        
         echo
"</div>";
    
    echo
"</div>";
    echo
"</div>";
    } 

el formato de la papeleta es muy parecido a este, es como una nota de venta

este codigo si me repite el numero de papeletas por party(venta), y me muestra correctamente los datos de cada una, el problema esta cuando tengo que mostrar los articulos de cada uno,
me los agrupa todos dentro de la primer papeleta, y no se las asigna a las que deberia en realidad (se que ese tipo de programacion con tanto echo tal vez no sea ideal pero hasta ahora funciona eso).

Se que esta confuso, pero si pudieran darme una idea de como solucionarlo, se los agradeceria mucho, no se si se tenga que hacer un while dentro de otro o que otra forma podria usarse.
y pues me siento un poco insegura en estas cuestiones ya que la programacion no es lo mio, y estoy desesperada u.u

Desde ya muchas gracias de antemano
  #2 (permalink)  
Antiguo 30/05/2014, 02:23
Colaborador
 
Fecha de Ingreso: marzo-2008
Ubicación: Sabadell
Mensajes: 4.897
Antigüedad: 16 años, 1 mes
Puntos: 574
Respuesta: While dentro de otro while

Es mejor la sintaxis JOIN ON

Código MySQL:
Ver original
  1. SELECT parties.idparties,
  2.        parties.anfitriona,
  3.        parties.fecha,
  4.        papeletas.idparties,
  5.        papeletas.idpapeleta,
  6.        papeleta_articulos.idparties,
  7.        papeleta_articulos.idpapeleta_a,
  8.        papeleta_articulos.cantidad,
  9.        papeleta_articulos.producto,
  10.        papeleta_articulos.precio,
  11.        papeleta_articulos.cantidad * papeleta_articulos.precio subtotal
  12. FROM parties INNER JOIN papeletas ON parties.idparties = papeletas.idparties
  13.              INNER JOIN papeleta_articulos ON papeletas.idpapeleta = papeleta_articulos.idpapeleta_a
  14. WHERE parties.idparties = '$idparties'";

No tiene ningun sentido hacer esas dos consultas dan los mismos datos. Imagina lo siguiente.


Código PHP:
Ver original
  1. //No hago la primera query
  2.  
  3. $query1="SELECT parties.idparties,
  4.       parties.anfitriona,
  5.       parties.fecha,
  6.       papeletas.idparties,
  7.       papeletas.idpapeleta,
  8.       papeleta_articulos.idparties,
  9.       papeleta_articulos.idpapeleta_a,
  10.       papeleta_articulos.cantidad,
  11.       papeleta_articulos.producto,
  12.       papeleta_articulos.precio,
  13.       papeleta_articulos.cantidad * papeleta_articulos.precio subtotal
  14. FROM parties INNER JOIN papeletas ON parties.idparties = papeletas.idparties
  15.             INNER JOIN papeleta_articulos ON papeletas.idpapeleta = papeleta_articulos.idpapeleta_a
  16. WHERE parties.idparties = '$idparties'";
  17. $resultado1=mysql_query($query1);
  18.  
  19. $j=0; //Creo una variable auxiliar.
  20. while($row=mysql_fetch_array($resultado1)){
  21.     if($j==0){
  22.         //Muestro los datos de la cabecera de la papeleta
  23.         //Solo cuando $j es 0 cero.
  24.     }
  25.     //Muestro los datos del producto
  26.    
  27.  
  28.     //IMPORTANTE
  29.     $j++;
  30.     //Incremento $j para que en el siguiente ciclo del bucle ya no sea 0
  31. }

Deberías leer sobre normalización de bbdd, te faltan tablas (ciudades,clientes,productos), y sobra algún campo (subtotal, deberías eliminarlo para usar mi query).
__________________
Quim
--------------------------------------------------
Ayudar a ayudar es una buena práctica!!! Y da buenos resultados.

Última edición por quimfv; 30/05/2014 a las 02:33

Etiquetas: mysql
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:12.