在MySQL中,通过对JSON列执行联接从两个表中获取数据时出现问题

时间:2019-01-02 12:09:41

标签: php mysql json codeigniter-3

我有两个表用户和用户组,它们之间没有硬性关系。 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"])

1 个答案:

答案 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}}。