Таблицы
users (id, till)
и
orders (id, uid, ts)
В заказах отметка времени оплаты
ts
значит, что оплачен период, условно, длиной 10. Если оплаченные периоды накладываются, срок окончания, соотв. отодвигается.
создание таблиц-- Orders
CREATE TABLE orders (
id INT NOT NULL AUTO_INCREMENT,
uid INT NOT NULL ,
ts INT NOT NULL ,
PRIMARY KEY (id)
);
-- Paid duraion = 10
-- 1: 0-10, 12-22 + 21-31 = 32
-- 2: 12-22, 22-32 + 22-32 = 42
INSERT INTO orders (uid, ts)
VALUES (1,0), (2,12), (1,12), (1,21), (2,22), (2,22);
-- Users
CREATE TABLE users (
id INT NOT NULL,
till INT,
PRIMARY KEY (id)
);
-- далеко не все пользователи делали оплаченные заказы
INSERT INTO users (id) VALUES (1), (2), (3), (4);
Как средствами MySQL обновить колонку
till
актуальными сроками окончания оплаченных периодов у пользователей, сделавших заказы?
Пробую так:
UPDATE users u JOIN orders o ON u.id = o.uid
SET till = (
SELECT until FROM (
SELECT o2.uid, o2.ts,
(@till := IF (@till < o2.ts, o2.ts + 10, @till + 10)) AS until,
(@n := @n + 1) n
FROM orders AS o2 JOIN (SELECT @till:=0, @n:=0 ) AS init
WHERE o2.uid = u.id
) AS t1
ORDER BY n DESC
LIMIT 1
)
Ошибка:
Unknown column 'u.id' in 'where clause' Т.е. из внутреннего запроса не получить текущий users.id
И неправильно JOIN с заказами я использую: так по каждому юзеру обновляться будет по несколько раз, видимо.
Как получить очередной
users.id
во внутреннем запросе?