Foros del Web » Programando para Internet » PHP »

listado de productos en un array

Estas en el tema de listado de productos en un array en el foro de PHP en Foros del Web. Hola, lo que intento es extraer el listado de productos que ya ha comprado el cliente en un array para mostrar en una tabla, los ...
  #1 (permalink)  
Antiguo 12/06/2013, 01:26
 
Fecha de Ingreso: julio-2005
Mensajes: 304
Antigüedad: 18 años, 9 meses
Puntos: 4
listado de productos en un array

Hola, lo que intento es extraer el listado de productos que ya ha comprado el cliente en un array para mostrar en una tabla, los datos del cliente que incluyen nombre, dirección y tlfs más los productos que ya haya comprado.

Hasta ahora el código que tengo sería el siguiente.

Código MySQL:
Ver original
  1. $host=_DB_SERVER_;
  2. $login=_DB_USER_;
  3. $password=_DB_PASSWD_;
  4. $base=_DB_NAME_;
  5.  
  6. mysql_connect($host,$login,$password) or die(mysql_error());
  7. mysql_select_db($base);
  8.  
  9. $Query='SELECT ps_customer.id_customer, ps_customer.firstname, ps_customer.lastname, address1, address2,
  10. city, postcode, phone, phone_mobile, product_name
  11. FROM ps_customer
  12. INNER JOIN ps_address ON ps_address.id_customer=ps_customer.id_customer
  13. INNER JOIN ps_orders ON ps_orders.id_customer=ps_customer.id_customer
  14. INNER JOIN ps_order_detail ON ps_order_detail.id_order=ps_orders.id_order
  15. ORDER BY postcode';
  16.  
  17.  
  18. $result=mysql_query($Query);

Y el PHP que no termina de funcionarme sería:

Código PHP:
Ver original
  1. $html ="";
  2. while($row = mysql_fetch_array($result))
  3. {
  4.     if($i==$max)
  5.     {
  6.         $i = 0;
  7.         $y_axe=30;
  8.         $interligne=0;
  9.     }
  10.     $i=$i+1;
  11.     $firstname=utf8_decode($row['firstname']);
  12.     $lastname=utf8_decode($row['lastname']);
  13.     $address1=utf8_decode($row['address1']);
  14.     $address2=utf8_decode($row['address2']);
  15.     $cp=utf8_decode($row['postcode']); 
  16.     $ciudad=utf8_decode($row['city']);
  17.     $telefono=utf8_decode($row['phone']);
  18.     $movil=utf8_decode($row['phone_mobile']);
  19.     $productos=utf8_decode($row['product_name']);
  20.    
  21.     if($row['deleted']==0)
  22.     {
  23.     $html =
  24.         $html.'<table width="100%" border="1" cellspacing="0" cellpadding="0">
  25.             <tr>
  26.                 <td>
  27.                     <table width="100%" border="0" cellspacing="0" cellpadding="0">
  28.                         <tr>
  29.                             <td width="16%"><b>R:</b> '.$i.'</td>
  30.                             <td width="35%"><b>N:</b> '.$firstname.' '.$lastname.'</td>
  31.                             <td width="49%"><b>D:</b> '.$address1.' '.$address2.' <b>L:</b> '.$ciudad.' <b>CP:</b> '.$cp.'</td>
  32.                         </tr>
  33.                         <tr>
  34.                             <td><b>T:</b> '.$telefono.'</td>
  35.                             <td colspan="2" rowspan="2"><b>S:</b> '.$productos.'</td>
  36.                         </tr>
  37.                         <tr>
  38.                             <td><b>M:</b> '.$movil.'</td>
  39.                         </tr>
  40.                     </table>
  41.                 </td>
  42.             </tr>
  43.         </table><br /><br />';
  44.     }
  45.  
  46. }

Si hago un echo me extrae todos los datos que necesito pero al hacerme el listado me repite los clientes que tienen varios productos comprados (1 pepe calle tlf producto1 1 pepe calle tlf producto2) y yo lo que necesito es que me liste una vez al cliente y me haga un array con las compras (1 pepe calle tlf producto1, producto2)

Gracias de antemano
__________________
http://www.lynxstyle.net

En la vida como en el ajedrez, hay un reloj que marca el tiempo de cada movimiento, si lo consumes pierde (MJJG)
  #2 (permalink)  
Antiguo 12/06/2013, 01:58
Avatar de repara2  
Fecha de Ingreso: septiembre-2010
Ubicación: München
Mensajes: 2.445
Antigüedad: 13 años, 7 meses
Puntos: 331
Respuesta: listado de productos en un array

El problema es la select que haces al principio, Simplifica el codigo haciendo dos selects:
1. Seleccionar clientes
2. POr cada cliente:
01. seleccionar productos comprados

Será más claro para tí y mucho mas facil de implementar, saludos.
__________________
Fere libenter homines, id quod volunt, credunt.
  #3 (permalink)  
Antiguo 12/06/2013, 02:30
 
Fecha de Ingreso: julio-2005
Mensajes: 304
Antigüedad: 18 años, 9 meses
Puntos: 4
Respuesta: listado de productos en un array

Cita:
Iniciado por repara2 Ver Mensaje
El problema es la select que haces al principio, Simplifica el codigo haciendo dos selects:
1. Seleccionar clientes
2. POr cada cliente:
01. seleccionar productos comprados

Será más claro para tí y mucho mas facil de implementar, saludos.

Es lo que intento evitar y estoy buscando como hacerlo en una sola consulta, gracias de todos modos.
__________________
http://www.lynxstyle.net

En la vida como en el ajedrez, hay un reloj que marca el tiempo de cada movimiento, si lo consumes pierde (MJJG)
  #4 (permalink)  
Antiguo 12/06/2013, 07:32
Avatar de Italico76  
Fecha de Ingreso: abril-2007
Mensajes: 3.303
Antigüedad: 17 años
Puntos: 292
Respuesta: listado de productos en un array

Cita:
listado me repite los clientes que tienen varios productos comprados (1 pepe calle tlf producto1 1 pepe calle tlf producto2) y yo lo que necesito es que me liste una vez al cliente y me haga un array con las compras
Usa SELECT DISTINCT y para ver el detalle de cuantas ordenes o productos tiene cada cliente, eso puedes hacerlo en otra consulta
__________________
Salu2!
  #5 (permalink)  
Antiguo 13/06/2013, 07:47
 
Fecha de Ingreso: julio-2005
Mensajes: 304
Antigüedad: 18 años, 9 meses
Puntos: 4
Respuesta: listado de productos en un array

Gracias Italico76, pero como indiqué a repara2 me gustaría evitar hacerlo en dos consultas si es posible.
__________________
http://www.lynxstyle.net

En la vida como en el ajedrez, hay un reloj que marca el tiempo de cada movimiento, si lo consumes pierde (MJJG)
  #6 (permalink)  
Antiguo 18/06/2013, 01:54
 
Fecha de Ingreso: julio-2005
Mensajes: 304
Antigüedad: 18 años, 9 meses
Puntos: 4
Respuesta: listado de productos en un array

Como no encontraba la manera de hacerlo solo en una consulta lo he separado en dos y al hacer un echo me muestra correctamente los resultados que deseo, es decir:

1 nombre direccion tlf movil producto1, producto1

pero al pasarlo a codigo html no lo muestra, os dejo el código como quedó

Código PHP:
Ver original
  1. mysql_connect($host,$login,$password) or die(mysql_error());
  2.  
  3. $Query='SELECT ps_customer.id_customer, ps_customer.firstname, ps_customer.lastname, address1, address2, city, postcode,
  4. phone, phone_mobile
  5. FROM ps_customer
  6. INNER JOIN ps_address ON ps_address.id_customer=ps_customer.id_customer ORDER BY postcode';
  7.  
  8. $result=mysql_query($Query);
  9.  
  10. $html ="";
  11. $productos="";
  12. while($row = mysql_fetch_array($result))
  13. {
  14.     if($i==$max)
  15.     {
  16.         $i=0;
  17.         $y_axe=30;
  18.         $interligne=0;
  19.     }
  20.     $i=$i+1;
  21.     $idcustomer=utf8_decode($row['id_customer']);
  22.     $firstname=utf8_decode($row['firstname']);
  23.     $lastname=utf8_decode($row['lastname']);
  24.     $address1=utf8_decode($row['address1']);
  25.     $address2=utf8_decode($row['address2']);
  26.     $cp=utf8_decode($row['postcode']); 
  27.     $ciudad=utf8_decode($row['city']);
  28.     $telefono=utf8_decode($row['phone']);
  29.     $movil=utf8_decode($row['phone_mobile']);
  30.    
  31.     $Query2 = "SELECT product_name
  32. FROM ps_order_detail
  33. INNER JOIN ps_orders ON ps_order_detail.id_order=ps_orders.id_order
  34. WHERE id_customer='$idcustomer'";
  35.  
  36.         $result2 = mysql_query($Query2);
  37.         while($row2 = mysql_fetch_array($result2)) {
  38.            
  39.             $productoname = utf8_decode($row2['product_name']);
  40.             $productos = $productos.' '.$productoname.', ';
  41.         }
  42.    
  43.     if($row['deleted']==0)
  44.     {
  45.     $html = $html.'<table width="100%" border="1" cellspacing="0" cellpadding="0">
  46.             <tr>
  47.                 <td>
  48.                     <table width="100%" border="0" cellspacing="0" cellpadding="0">
  49.                         <tr>
  50.                             <td width="16%"><b>R:</b> '.$idcustomer.'</td>
  51.                             <td width="35%"><b>N:</b> '.$firstname.' '.$lastname.'</td>
  52.                             <td width="49%"><b>D:</b> '.$address1.' '.$address2.' <b>L:</b> '.$ciudad.' <b>CP:</b> '.$cp.'</td>
  53.                         </tr>
  54.                         <tr>
  55.                             <td><b>T:</b> '.$telefono.'</td>
  56.                             <td colspan="2" rowspan="2"><b>S:</b> '.$productos.'</td>
  57.                         </tr>
  58.                         <tr>
  59.                             <td><b>M:</b> '.$movil.'</td>
  60.                         </tr>
  61.                     </table>
  62.                 </td>
  63.             </tr>
  64.         </table><br /><br />';
  65.     }
  66.  
  67. }
__________________
http://www.lynxstyle.net

En la vida como en el ajedrez, hay un reloj que marca el tiempo de cada movimiento, si lo consumes pierde (MJJG)

Etiquetas: html, listado, mysql, productos, select, sql, tabla
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 13:06.