Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/57.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/json/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/cmake/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mysql 如何连接JSON键和值_Mysql_Json_Join_Inner Join - Fatal编程技术网

Mysql 如何连接JSON键和值

Mysql 如何连接JSON键和值,mysql,json,join,inner-join,Mysql,Json,Join,Inner Join,有一个users表 id name role points 1 abc admin 50 2 xyz writer 25 3 efg student 10 4 ghi x_role 7 5 abc2 admin 23 id participants 1 {"admin":[1], "writer":[2], "student": [], "x_role": []} 2 {"admin":[1,5],

有一个
users

id  name    role  points
1   abc     admin  50
2   xyz     writer  25
3   efg     student  10
4   ghi     x_role   7
5   abc2     admin   23
id  participants
1   {"admin":[1], "writer":[2], "student": [], "x_role": []}
2   {"admin":[1,5], "writer":[], "student": [3], "x_role": [4]}
和另一个
参与者

id  name    role  points
1   abc     admin  50
2   xyz     writer  25
3   efg     student  10
4   ghi     x_role   7
5   abc2     admin   23
id  participants
1   {"admin":[1], "writer":[2], "student": [], "x_role": []}
2   {"admin":[1,5], "writer":[], "student": [3], "x_role": [4]}
现在,我必须根据用户表中的管理员+作者+所有角色的值计算每个参与者的分数

结果应为

Participants_id  Score

2                90
1                75

您可以使用以下解决方案:

-- detailled result
SELECT p.id, GROUP_CONCAT(u.name SEPARATOR ', ') AS participants, SUM(u.points) AS score
FROM participants p INNER JOIN users u ON JSON_CONTAINS(JSON_EXTRACT(participants, CONCAT("$.", u.role)), CAST(u.id AS JSON), '$') = 1
GROUP BY p.id
ORDER BY p.id

-- expected result
SELECT p.id AS Participants_id, SUM(u.points) AS Score
FROM participants p INNER JOIN users u ON JSON_CONTAINS(JSON_EXTRACT(participants, CONCAT("$.", u.role)), CAST(u.id AS JSON), '$') = 1
GROUP BY p.id
ORDER BY p.id

塞巴斯蒂安,你真的试过这个吗?在任何情况下,这个JSON字符串表示一对多的关系,即使JSON字符串文本也需要保留,它实际上应该在数据库本身中表示。这将是一个缓慢的w-w-w查询…如果有超过5个角色,我不认为这是最佳的solution@SebastianBrosch我已经添加了结果我已经更新了我的问题,我希望你能得到它