С учетом таблицы orders
:
+-----------+----------------+
| AccountID | AccountOrderID |
+-----------+----------------+
| 1 | NULL |
| 5 | NULL |
| 1 | NULL |
| 6 | NULL |
| 5 | NULL |
| 2 | NULL |
| 6 | NULL |
| 4 | NULL |
| 4 | NULL |
| 5 | NULL |
+-----------+----------------+
Как можно назначить инкрементный идентификатор для AccountOrderID
относительно Account ID
, чтобы он выглядел следующим образом:
+-----------+----------------+
| AccountID | AccountOrderID |
+-----------+----------------+
| 1 | 1 |
| 5 | 1 |
| 1 | 2 |
| 6 | 1 |
| 5 | 2 |
| 2 | 1 |
| 6 | 2 |
| 4 | 1 |
| 4 | 2 |
| 5 | 3 |
+-----------+----------------+
До сих пор я использовал users
со столбцом с именем LastOrderID
и триггером для его увеличения вместе с AccountOrderID
(который прекрасно работает):
DELIMITER $$
CREATE TRIGGER `new_order` BEFORE INSERT ON maindb.orders
FOR EACH ROW BEGIN
UPDATE users
SET LastOrderID = LastOrderID + 1
WHERE AccountID = NEW.AccountID;
SET NEW.AccountOrderID = (SELECT LastOrderID FROM Credentials WHERE AccountID = NEW.AccountID);
END;
$$
DELIMITER ;
Но я считаю, что Таблица users
не должна использоваться для этой цели: есть ли другой способ добиться этого результата?
РЕДАКТИРОВАТЬ
Даже если это именно то, что сказал GMB, Вот ответ, предлагающий похожий пример: { ссылка }