Выбрать строки MySQL, сумма значений столбца которых меньше или равна значению переменной PHP
Есть переменная php $maximum_amount = 0.50000000.
Есть таблица в базе mysql с названием 'orders', например:
+----------+-----------+--------------+---------------------+
| OrderID | UserID | amount | created_time |
+----------+-----------+--------------+---------------------+
| a1bh | htl57 | 0.10000000 | 2020-07-27 08:23:11 |
| 2c3f | 34gh7 | 0.30000000 | 2020-07-27 08:24:49 |
| 4d5s | lkr37 | 0.20000000 | 2020-07-27 08:29:03 |
| 5e6k | jkw68 | 0.50000000 | 2020-07-27 08:30:04 |
+----------+-----------+--------------+---------------------+
Как выбрать строки из этой таблицы с лимитом 100, order ASC по 'created_time', чтобы сумма столбца 'amount' выбранных строк не была больше значения переменной $maximum_amount?
Насколько я понимаю, нужно использовать куммулятивную сумму в mysql и сравнивать ее со значением переменной. Но пока не знаю как это сделать.
Ответы (2 шт):
Автор решения: Enokin
→ Ссылка
$host = '127.0.0.1';
$db = 'test';
$user = 'root';
$pass = '';
$charset = 'utf8';
$maximum_amount = 0.50000000
$dsn = "mysql:host=$host;dbname=$db;charset=$charset";
try {
$dbh = new PDO($dsn, $user, $password);
} catch (PDOException $e) {
die('Подключение не удалось: ' . $e->getMessage());
}
$stmt = $pdo->prepare('select UserID, amount from table GROUP BY amount, UserID HAVING SUM(amount) < ? limit 100 order by created_time ASC');
$stmt->execute([$maximum_amount]);
foreach ($stmt as $row)
{
echo $row['UserID'] . ':' . $row['amount'] . "\n";
}
Если я правильно понял вопрос, то можно так
Автор решения: Oleg
→ Ссылка
$sum_amount = 1.40000000;
$this->db->from("(select *, (@sum := @sum + amount) as cume_amount
from orders_table cross join
(select @sum := 0) params
order by amount
) orders_table where cume_amount <= 1.40000000");
$this->db->limit(100);
$this->db->order_by("time_order_created", "ASC");
$query = $this->db->get();