#mysql
Вопрос:
Я пытаюсь выполнить запрос на ОБНОВЛЕНИЕ, который СУММИРУЕТ rewards_balance
только 5 пользователей, отсортированных по дате их покупки.
Users
таблица является :
id rewards_balance
1 0
2 20
3 0
4 23
5 11
6 45
7 1
8 0
9 0
10 10
Вот мой subscription
столик
payer_id created
1 1616137161
2 1616137165
5 1616137166
7 1616137167
3 1616137168
4 1616137169
9 1616137175
Запрос на ОБНОВЛЕНИЕ должен работать таким образом, чтобы он добавлял заданную сумму 5 пользователям, которые получили подписку первыми. Таким образом, результат после ОБНОВЛЕНИЯ должен быть следующим
id rewards_balance
1 0 20
2 20 20
3 0 20
4 23
5 11 20
6 45
7 1 20
8 0
9 0
10 10
Таким образом, как вы видите, 20 добавляется только к тем идентификаторам, у которых сначала есть подписка.
То, что я пробовал до сих пор, — это :
UPDATE users u LEFT JOIN subscription m ON u.id = m.payer_id SET u.rewards_balance = u.rewards_balance 20
ORDER BY `m`.`created` ASC LIMIT 10
Я продолжаю получать следующую ошибку.
Query error: Incorrect usage of UPDATE and ORDER BY
Помогите, пожалуйста.
Ответ №1:
ORDER BY
и LIMIT
не допускаются при ОБНОВЛЕНИИ нескольких таблиц. См. документацию.
Вы можете сделать это вместо этого:
UPDATE users u
JOIN (
SELECT m.payer_id
FROM subscription m
ORDER BY `m`.`created`
LIMIT 10
) q on q.payer_id=u.id
SET u.rewards_balance = u.rewards_balance 20;
Комментарии:
1. Я это понял. Однако в любом случае, что можно было бы обойти? Я думаю, что решение должно быть простым. Но я просто делаю это неправильно.
2. @YaseenHussain Это довольно просто. Вместо этого используйте производную таблицу.