Ver Mensaje Individual
  #2 (permalink)  
Antiguo 06/07/2014, 20:24
Avatar de gnzsoloyo
gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 16 años, 5 meses
Puntos: 2658
Respuesta: Duda con consulta

En realidad, no hay ningún error. Lo que pasa es que sólo uno de los registros cumple con la premisa de total <=24.
Para que quede claro, voy a reconstruir la tabla en base a tu descripción y agregarle los datos indicados por ti:
Código MySQL:
Ver original
  1. mysql> DROP TABLE IF EXISTS existencia ;
  2. Query OK, 0 rows affected (0.03 sec)
  3.  
  4. mysql> CREATE TABLE IF NOT EXISTS existencia (
  5.     ->     fecha DATE,
  6.     ->     idproducto INT UNSIGNED,
  7.     ->     costo DECIMAL(10 , 2 ),
  8.     ->     cantidad INT UNSIGNED
  9.     -> );
  10. Query OK, 0 rows affected (0.05 sec)
  11.  
  12. mysql> INSERT INTO existencia
  13.     -> VALUES
  14.     -> (1, '2014-07-03', 1, 8.10, 10),
  15.     -> (2, '2014-07-04', 1, 8.05, 15),
  16.     -> (3, '2014-07-05', 1, 8.12, 20);
  17. Query OK, 3 rows affected (0.00 sec)
  18. Records: 3  Duplicates: 0  Warnings: 0

Ahora, vamos a ejecutar sólo la subconsultla interna, sin la exterior ni la condición, de modo que se vea qué valores va obteniendo la columna "TOTAL":
Código MySQL:
Ver original
  1. mysql> SELECT
  2.     ->     id,
  3.     ->     fecha,
  4.     ->     idproducto,
  5.     ->     costo,
  6.     ->     cantidad,
  7.     ->     (@T:=@T + cantidad) total
  8.     -> FROM
  9.     ->     existencia
  10.     ->          JOIN
  11.     ->     (SELECT @T:=0) i
  12.     -> ORDER BY fecha DESC;
  13. +----+------------+------------+-------+----------+-------+
  14. | id | fecha      | idproducto | costo | cantidad | total |
  15. +----+------------+------------+-------+----------+-------+
  16. |  3 | 2014-07-05 |          1 |  8.12 |       20 |    20 |
  17. |  2 | 2014-07-04 |          1 |  8.05 |       15 |    35 |
  18. |  1 | 2014-07-03 |          1 |  8.10 |       10 |    45 |
  19. +----+------------+------------+-------+----------+-------+
  20. 3 rows in set (0.00 sec)

Como puedes ver, sólo uno de los registros es menor o igual a 24, por lo que si pongo tu query, el resultado es:
Código MySQL:
Ver original
  1. mysql> SELECT id, fecha, idproducto, costo, cantidad, total
  2.     ->   FROM
  3.     -> (SELECT id, fecha, idproducto, costo, cantidad, @t := @t + cantidad as total
  4.     ->     FROM existencia JOIN (SELECT @t := 0) i
  5.     ->    ORDER BY fecha DESC) q
  6.     ->  WHERE total<=26;
  7. +----+------------+------------+-------+----------+-------+
  8. | id | fecha      | idproducto | costo | cantidad | total |
  9. +----+------------+------------+-------+----------+-------+
  10. |  3 | 2014-07-05 |          1 |  8.12 |       20 |    20 |
  11. +----+------------+------------+-------+----------+-------+
  12. 1 row in set (0.00 sec)
Lo que es totalmente correcto.
Entonces, el "error" consiste en que quieres tomar los registros sobre un valor que no es el "total", sino la "cantidad" de cada uno. Creo que lo que tienes es un error de definición de lo que realmente quieres obtener...
Básicamente, el campo a comparar para que salgan los tres registros, no es ese:

Código MySQL:
Ver original
  1. mysql> SELECT
  2.     ->     id, fecha, idproducto, costo, cantidad, total
  3.     -> FROM
  4.     ->     (SELECT
  5.     ->         id,
  6.     ->             fecha,
  7.     ->             idproducto,
  8.     ->             costo,
  9.     ->             cantidad,
  10.     ->             @t:=@t + cantidad as total
  11.     ->     FROM
  12.     ->         existencia
  13.     ->     JOIN (SELECT @t:=0) i
  14.     ->     ORDER BY fecha DESC) q
  15.     -> WHERE
  16.     ->     cantidad <= 26;
  17. +----+------------+------------+-------+----------+-------+
  18. | id | fecha      | idproducto | costo | cantidad | total |
  19. +----+------------+------------+-------+----------+-------+
  20. |  3 | 2014-07-05 |          1 |  8.12 |       20 |    20 |
  21. |  2 | 2014-07-04 |          1 |  8.05 |       15 |    35 |
  22. |  1 | 2014-07-03 |          1 |  8.10 |       10 |    45 |
  23. +----+------------+------------+-------+----------+-------+

Cita:
Encontré este otro codigo que si funciona pero solo en mysql y no se como aplicarlo para usarlo en PHP
El código SQL no es "aplicable" a PHP. PHP no interpreta SQL, ni MySQL entiende PHP. Son entornos de existencia diferentes. PHP lo único que puede hacer es enviar la query a MySQL, e interpretar lo que MySQL le responde. En ese sentido, con PHP lo que debes hacer es usar los resultados.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)

Última edición por gnzsoloyo; 06/07/2014 a las 20:31