Add multiples of rows till they satisfy an arbitrary sum then return the rows that do
You could use user defined variable in mysql to achieve your goal:

create table t ( id int not null auto_increment, 
                 col_a int not null, 
                 col_b int not null, 
                 primary key(id) );

insert into t(col_a, col_b) values (1,20), (1,70), (1,110), (1,30);

set @sum := 0;
select *, col_a * col_b, @sum as s 
from t
where (@sum := @sum + (col_a * col_b)) &lt;= 200
order by id; 

+----+-------+-------+---------------+------+
| id | col_a | col_b | col_a * col_b | s    |
+----+-------+-------+---------------+------+
|  1 |     1 |    20 |            20 |   20 |
|  2 |     1 |    70 |            70 |   90 |
|  3 |     1 |   110 |           110 |  200 |
+----+-------+-------+---------------+------+
3 rows in set (0.00 sec)


You must use order by to make sure of the rows order as suggested by ypercube. For example you can sum column in reverse order. 

set @sum := 0;
select *, col_a * col_b, @sum as s  
from t where (@sum := @sum + (col_a * col_b)) &lt;= 200 
order by id desc;

+----+-------+-------+---------------+------+
| id | col_a | col_b | col_a * col_b | s    |
+----+-------+-------+---------------+------+
|  4 |     1 |    30 |            30 |   30 |
|  3 |     1 |   110 |           110 |  140 |
+----+-------+-------+---------------+------+
2 rows in set (0.00 sec)