Запрос на обновление MYSQL с использованием ПОРЯДКА и ОГРАНИЧЕНИЯ для оператора JOIN

#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 Это довольно просто. Вместо этого используйте производную таблицу.