Foros del Web

Foros del Web (http://www.forosdelweb.com/)
-   PHP (http://www.forosdelweb.com/f18/)
-   -   Consulta php+mysql (http://www.forosdelweb.com/f18/consulta-php-mysql-715173/)

aldo1982 02/07/2009 13:25

Consulta php+mysql
 
buenas tengo esta tabla

tabla_compras(
id,
nro_compra,
detalle,
importe
)

ejemplo de datos

Cita:

id nro_compra detalle importe
1 1111 detalle 20
2 1111 detalle 45
3 1111 detalle 25
4 2222 detalle 125
5 2222 detalle 20
6 3333 detalle 33
7 3333 detalle 399
8 3333 detalle 33
lo que necesito es la siguiente consulta




Cita:

id nro_compra detalle importe
1 1111 detalle 20
2 1111 detalle 45
3 1111 detalle 25
subtotal 90
4 2222 detalle 125
5 2222 detalle 20
subtotal 125
6 3333 detalle 33
7 3333 detalle 399
8 3333 detalle 33
subtotal 432

David 02/07/2009 13:37

Respuesta: Consulta php+mysql
 
Ya te había respondido cómo hacerlo en tu otro tema :ojotes:.

La lógica es simple:
Código php:
Ver original
  1. realizar_consulta();
  2. $nro_compra = '';
  3. $subtotal = 0;
  4. while (/* Obtener datos */) {
  5.     if ($nro_compra != $fila['nro_compra']) {
  6.         if ($subtotal > 0) {
  7.             echo 'subtotal: ' . $subtotal;
  8.             $subtotal = 0;
  9.         }
  10.         $nro_compra = $fila['nro_compra'];
  11.     }
  12.     $subtotal += $fila['importe'];
  13.     imprimir_fila();
  14. }

Ronin46 02/07/2009 13:39

Respuesta: Consulta php+mysql
 
Con la cláusula group by de Mysql

Te pongo la sentencia en lenguaje humano
Selecciona suma de precio de la tabla compras group by id

EDITO: Arghh, se me adelantaron, lo de arriba quizás es mejor, porque te da la lista de productos y vas intercalando el subtotal. Lo que yo te pongo sólo te da el subtotal.

aldo1982 02/07/2009 14:15

Respuesta: Consulta php+mysql
 
Cita:

Iniciado por David (Mensaje 2988504)
Ya te había respondido cómo hacerlo en tu otro tema :ojotes:.

La lógica es simple:
Código php:
Ver original
  1. realizar_consulta();
  2. $nro_compra = '';
  3. $subtotal = 0;
  4. while (/* Obtener datos */) {
  5.     if ($nro_compra != $fila['nro_compra']) {
  6.         if ($subtotal > 0) {
  7.             echo 'subtotal: ' . $subtotal;
  8.             $subtotal = 0;
  9.         }
  10.         $nro_compra = $fila['nro_compra'];
  11.     }
  12.     $subtotal += $fila['importe'];
  13.     imprimir_fila();
  14. }


hola neuvamente david..mcuahs gracias. anda bien.. pero el ultimo subtotal no lo muestra :(

aldo1982 02/07/2009 14:16

Respuesta: Consulta php+mysql
 
Cita:

Iniciado por Ronin46 (Mensaje 2988506)
Con la cláusula group by de Mysql

Te pongo la sentencia en lenguaje humano
Selecciona suma de precio de la tabla compras group by id

EDITO: Arghh, se me adelantaron, lo de arriba quizás es mejor, porque te da la lista de productos y vas intercalando el subtotal. Lo que yo te pongo sólo te da el subtotal.

buenas, podrias poner tu forma para ver la logica que usa y asi poder tener otra alternativa ?

gracias de ante mano

David 02/07/2009 14:17

Respuesta: Consulta php+mysql
 
Puedes imprimir el último subtotal después del bloque while()

aldo1982 02/07/2009 15:50

Respuesta: Consulta php+mysql
 
Cita:

Iniciado por David (Mensaje 2988607)
Puedes imprimir el último subtotal después del bloque while()

bien andubo perfecto, mil gracias, pero te pregunto ya que estamos en el baile je ^^

alguan forma para automatizar para no repetir el codigo alinicio cuando comienza el while y uando termina el while .. me explico ?

Ronin46 02/07/2009 16:12

Respuesta: Consulta php+mysql
 
SELECT `nro_compra` , sum( `importe` )
FROM `tabla_compras`
GROUP BY `nro_compra`

Te devuelve:

nro_compra sum(`importe`)
1111 110
2222 145
3333 465

Esto esta bien si quieres poner los subtotales sólos, que por tu primer post creo que no es el caso.

Aunque si te quieres liar, puedes combinar esta sentencia, con la sentencia en la que obtienes los productos e ir intercalando cada vez que cambie de nro_compra, es decir, empiezas a mostrar los resultados de nro_compra = 1111, cuando llegues al 2222 metes previamente el subtotal 1111 que calculaste con esta sentencia y así con cada nro_compra (estarías en un bucle).

Pero vamos, lo de David está mucho mejor y es más simple.

aldo1982 02/07/2009 16:31

Respuesta: Consulta php+mysql
 
Cita:

Iniciado por Ronin46 (Mensaje 2988802)
SELECT `nro_compra` , sum( `importe` )
FROM `tabla_compras`
GROUP BY `nro_compra`

Te devuelve:

nro_compra sum(`importe`)
1111 110
2222 145
3333 465

Esto esta bien si quieres poner los subtotales sólos, que por tu primer post creo que no es el caso.

Aunque si te quieres liar, puedes combinar esta sentencia, con la sentencia en la que obtienes los productos e ir intercalando cada vez que cambie de nro_compra, es decir, empiezas a mostrar los resultados de nro_compra = 1111, cuando llegues al 2222 metes previamente el subtotal 1111 que calculaste con esta sentencia y así con cada nro_compra (estarías en un bucle).

Pero vamos, lo de David está mucho mejor y es más simple.

bien a eso me referia, yo lo tenia hecho como lo estas poniendo vos, pero de esa manera me obliga a hacer una consulta sql dentro de orta consulta la cual recorro los registros con un while... entocnes al tener tantos registros es realmente lentisima la consulta, demora minutos y minutos hastaa traer lso resultados.

por eso de la forma que puso David anda mucho mejor :)

salu2 y gracias a Ambos

Ronin46 02/07/2009 16:40

Respuesta: Consulta php+mysql
 
Estuve mirando un poco más, porque recuerdo vagamente que se podía hacer todo con una consulta MySql pero no doy encontrado nada. Pero me encontré con esto que igual te vale para tener otra forma de verlo:

lists.mysql.com/mysql/192065


La zona horaria es GMT -6. Ahora son las 06:05.

Desarrollado por vBulletin® Versión 3.8.7
Derechos de Autor ©2000 - 2026, Jelsoft Enterprises Ltd.