Есть база данных. В ней 2 таблицы "wallets" и "orders". Мне нужно выбрать кошелек из таблицы "wallets" у которого month_limit + сумма которую задал юзер <= 10000, и этот же кошелек нужно проверить в таблице "orders" может быть он уже там лежит и не один раз и ожидает оплаты, взять все строки с этим кошельком из "orders" и их суммы добавить к month_limit + сумма которую задал юзер <= 10000. Посоветуйте как лучше здесь поступить, можно ли это сделать все в одном запросе, или нужно в первом запросе выбрать все кошельки из "wallets" а во втором проверить их наличие в таблице "orders" и проверить значение не больше ли 10000?
Ответ
Если вывести все кошельки где month_limit+$user_sum и при этом показать еще и эту сумму плюс сумму из orders, то:
SELECT w.*,
(SELECT w.month_limit + $user_sum + COALESCE(SUM(o.sum_to_buyer),0)
FROM orders o
WHERE w.idwallets = o.wallets_idwallets
) as total_sum
FROM wallets AS w
WHERE month_limit + $user_sum <= 10000
Если отобрать, где общая сумма, включая orders, меньше 10к, то немного усложнаем добавляя внешний запрос и проверку на общую сумму:
SELECT * FROM (
SELECT w.*,
(SELECT w.month_limit + $user_sum + COALESCE(SUM(o.sum_to_buyer),0)
FROM orders o
WHERE w.idwallets = o.wallets_idwallets
) as total_sum
FROM wallets AS w
WHERE month_limit + $user_sum <= 10000
) A
WHERE total_sum<=10000
Комментариев нет:
Отправить комментарий