使用 MYSQL 中的 JSON 对象数组

Working with a JSON array of objects in MYSQL

我有一个 SQL table:

CREATE TABLE pu_events(
  int eid AUTO_INCREMENT PRIMARY KEY, 
  varchar(20) title,
  varchar(255) description, 
  int(11) start_date UNSIGNED,
  int(11) end_date UNSIGNED,
  timestamp created DEFAULT CURRENT_TIMESTAMP,
  json members
)

我计划用成员 json 对象填充成员字段,该对象将是包含用户 ID (uid) 和出席成员状态的对象数组,例如:

{members: [{uid:1, status:0}, {uid:2, status:1}]}

但是我无法找到描述如何正确引用此对象结构以对其进行操作的任何资源,例如,如果我希望 'register' 用户加入事件,将他们的对象附加到成员数组,如:(members.push({uid:3, status:0}),或在给定用户确认或退出事件后更新其状态,如:(更新成员集状态 = 2 其中 uid = 1;).

我知道我用的伪c是js和mysql的组合,我也知道MySQL现在有JSON操作这个数据类型的函数,但我对处理这个特定用例的最佳方法感到困惑。

非常感谢您提前提出任何建议!

正确的解决方案是创建另一个 table:

CREATE TABLE pu_event_members (
 event_id INT NOT NULL,
 user_id INT NOT NULL,
 status TINYINT NOT NULL,
 PRIMARY KEY (event_id, user_id)
);

那么注册新会员就很简单了:

INSERT INTO pu_event_members SET event_id=?, user_id=?, status=?

或更新他们的状态:

UPDATE pu_event_members SET status=? WHERE event_id=? AND user_id=?

工作示例,但仅 select:

select pu_events.*
from pu_events, JSON_TABLE(members, "$.members[*].uid" COLUMNS(f INT PATH '$')) as list
where list.f = 1

Mysql8有支持JSON_TABLE

https://dev.mysql.com/doc/refman/8.0/en/json-search-functions.html https://dev.mysql.com/doc/refman/8.0/en/json-table-functions.html