我有两个表用户和用户组,它们之间没有硬性关系。 users表包含一个usergroup列,其中以JSON格式保存了usergroups表中的多个usergroup_id,而usergroups表则包含id和usergroup_title列。现在的要求是通过单个查询获取所有用户的列表,该查询应包含用户数据,即usergroups表中与JSON值相对应的usergroup_title。
我曾尝试使用以下查询,但收到错误消息JSON_CONTAINS函数不存在。代码如下:
SELECT
u.user_id,
g.id,
g.usergroup_title
FROM user u
LEFT JOIN usergroups g on JSON_CONTAINS(u.usergroup_id, CAST(g.id as JSON), '$')
我收到错误的JSON_CONTAINS函数。我想要以下格式的数据:
array("user_id" => 1, "usergroup" => ["admin", "customer", "seller"])
答案 0 :(得分:0)
因为我们知道这是处理多对一关系的一种可怕方法,所以让我们继续探讨吧:
SELECT
u.user_id,
g.id,
g.usergroup_title
FROM user u
LEFT JOIN usergroups g on u.usergroup_id LIKE CONCAT('%"',g.id,'"%')
如果您的ID在JSON中被视为字符串,它应该可以解决问题,否则您需要将'%"'
和'"%'
部分替换为'%:'
和{{ 1}}。