Возможно, плохая идея обновить таблицу USERS после вставки (или обновления) таблицы ORDERS. Избегайте хранения данных дважды. В вашем случае: вы всегда можете получить все «идентификаторы заказа» для пользователя, запросив таблицу ORDERS. Таким образом, вам не нужно хранить их в таблице USERS (снова). Пример (протестирован с MySQL 8.0, см. dbfiddle ):
Таблицы и данные
create table users( id integer primary key, name varchar(30) ) ;
insert into users( id, name ) values
(1, 'John'),(2, 'Michael'),(3, 'Someone') ;
create table orders(
id integer primary key
, userid integer
, content varchar(3) references users (id)
);
insert into orders ( id, userid, content ) values
(101, 1, '---'),(102, 1, '---')
,(103, 2, '---'),(104, 2, '---'),(105, 3, '---') ;
Может быть, VIEW - аналогичный приведенному ниже - поможет. (Преимущество: вам не нужны дополнительные столбцы или таблицы.)
-- View
-- Inner SELECT: group order ids per user (table ORDERS).
-- Outer SELECT: fetch the user name (table USERS)
create or replace view userorders (
userid, username, userdata
)
as
select
U.id, U.name, O.orders_
from (
select
userid
, group_concat( id order by id separator '|' ) as orders_
from orders
group by userid
) O join users U on O.userid = U.id ;
Как только представление будет на месте, вы можете просто ВЫБРАТЬ из него, и вы всегда получите текущие «пользовательские данные», например,
select * from userorders ;
-- result
userid username userdata
1 John 101|102
2 Michael 103|104
3 Someone 105
-- add some more orders
insert into orders ( id, userid, content ) values
(1000, 1, '***'),(4000, 1, '***'),(7000, 1, '***')
,(2000, 2, ':::'),(5000, 2, ':::'),(8000, 2, ':::')
,(3000, 3, '@@@'),(6000, 3, '@@@'),(9000, 3, '@@@') ;
select * from userorders ;
-- result
userid username userdata
1 John 101|102|1000|4000|7000
2 Michael 103|104|2000|5000|8000
3 Someone 105|3000|6000|9000