MySQL 5.7
我有一个表mission_sets
,其中有一个字段missions
。
mission_sets
。missions
是一个JSON数组。
这里是一个示例值
[1, 3, 5, 6, 8]
还有另一个missions
表id
与mission_set
中的数组匹配。missions
我想根据missions
。mission_sets
的值从missions
获取任务。
我已经创建了这个MySQL查询
SELECT SUBSTRING(missions,2,CHAR_LENGTH(missions)-2) FROM mission_sets WHERE `id`=7
返回
1, 3, 5, 6, 8
因此,我试图使用此MySQL查询获取所有任务详细信息
SELECT * FROM missions
WHERE `id` IN(SELECT SUBSTRING(missions,2,CHAR_LENGTH(missions)-2) FROM mission_sets WHERE `id`=7)
问题是我在运行查询时只得到第一行1
,而不是全部5行。
更新: 我也尝试过这种解决方案,但我仍然只能返回一排
SELECT * FROM missions
WHERE FIND_IN_SET(`id`,(SELECT SUBSTRING(missions,2,CHAR_LENGTH(missions)-2) FROM mission_sets WHERE `id`=7))>0
当我用实际值替换嵌入式SELECT查询时,我将所有行取回。
答案 0 :(得分:0)
我们可以在此处尝试使用MySQL JSON函数。使用JSON_SEARCH
将ID表连接到JSON数组表:
SELECT m.*
FROM missions m
INNER JOIN mission_sets ms
ON JSON_SEARCH(ms.missions, 'all', m.id) IS NOT NULL;
答案 1 :(得分:0)
我需要JSON_TABLE,它在MySQL 5.7中不可用,因为我的数组保存为整数而不是字符串'[1、3、5、12、14]和'[“ 1”,“ 3”, “ 5”,“ 12”,“ 14”]'我无法使用JSON_CONTAINS。因此,我将使用应用程序层来解决此问题。