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 originalQuery OK, 0 rows affected (0.03 sec)
-> );
Query OK, 0 rows affected (0.05 sec)
-> (1, '2014-07-03', 1, 8.10, 10),
-> (2, '2014-07-04', 1, 8.05, 15),
-> (3, '2014-07-05', 1, 8.12, 20);
Query OK, 3 rows affected (0.00 sec)
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 -> id,
-> fecha,
-> idproducto,
-> costo,
-> cantidad,
-> (@T:=@T + cantidad) total
-> existencia
+----+------------+------------+-------+----------+-------+
| id | fecha | idproducto | costo | cantidad | total |
+----+------------+------------+-------+----------+-------+
| 3 | 2014-07-05 | 1 | 8.12 | 20 | 20 |
| 2 | 2014-07-04 | 1 | 8.05 | 15 | 35 |
| 1 | 2014-07-03 | 1 | 8.10 | 10 | 45 |
+----+------------+------------+-------+----------+-------+
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 originalmysql
> SELECT id
, fecha
, idproducto
, costo
, cantidad
, total
-> (SELECT id
, fecha
, idproducto
, costo
, cantidad
, @t
:= @t
+ cantidad
as total
+----+------------+------------+-------+----------+-------+
| id | fecha | idproducto | costo | cantidad | total |
+----+------------+------------+-------+----------+-------+
| 3 | 2014-07-05 | 1 | 8.12 | 20 | 20 |
+----+------------+------------+-------+----------+-------+
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 -> id, fecha, idproducto, costo, cantidad, total
-> id,
-> fecha,
-> idproducto,
-> costo,
-> cantidad,
-> @t
:=@t
+ cantidad
as total
-> existencia
-> cantidad <= 26;
+----+------------+------------+-------+----------+-------+
| id | fecha | idproducto | costo | cantidad | total |
+----+------------+------------+-------+----------+-------+
| 3 | 2014-07-05 | 1 | 8.12 | 20 | 20 |
| 2 | 2014-07-04 | 1 | 8.05 | 15 | 35 |
| 1 | 2014-07-03 | 1 | 8.10 | 10 | 45 |
+----+------------+------------+-------+----------+-------+
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.