mySQL Left Join on multiple values (REPLACE AND SUBSTRING_INDEX FUNCTION failed)
mySQL Left Join on multiple values (REPLACE AND SUBSTRING_INDEX FUNCTION failed)
我正在尝试加入 2 tables tbl_questions
和 tbl_answers
.
tbl_questions
包含 qid 和答案列
tbl_answers
存储 answerid 和 answerdesc 列。
tbl_questions 数据通过用 ["answer"] 封装并用逗号分隔来存储多项选择答案 ["16672","16673","16676"] any [=33= 】 多项选择题答案是这样存储的16688。
我必须报告此数据并且无法对任何多项选择题进行连接,可以理解地返回空白。
我已尝试 运行 table
上的以下内容
REPLACE(REPLACE(REPLACE(answer,'"',''),'[',''),']','') FROM tbl_questions
这将清除对 16672,16673,16676 的多项选择答案
然后我用逗号分隔答案
SELECT Userid,SUBSTRING_INDEX(answer,',',1) as 'Option 1',
SUBSTRING_INDEX(SUBSTRING_INDEX(answer,',',2),',',-1) AS 'Option 2',
SUBSTRING_INDEX(SUBSTRING_INDEX(answer,',',-2),',',1) AS 'Option 3',
SUBSTRING_INDEX(answer,',',-1) AS 'Option 4'
FROM tbl_questions
这会创建新列选项 1 - 4,但仍然没有解决我的问题,因为单个答案出现在所有新列选项 1 -4 中。
我不觉得我为解决问题所采取的路线会奏效。
有谁知道我将如何加入论文 tables.
谢谢
您应该首先尝试修复您的架构,并有一个单独的 table 来存储每个问题的每个可能答案,每个 question/answer 元组一行。这将正确地表示您的实体之间的关系,并使查询更加容易和高效。
如果这不是您的选择,那么另一种选择是 find_in_set()
:
select ...
from tbl_questions q
inner join tbl_answers a
on find_in_set(
a.answer_id,
replace(replace(replace(q.answer,'"',''),'[',''),']','')
)
您也可以考虑使用 JSON 函数,因为 MySQL 可以理解您的字符串格式(这需要 MySQL 5.7 或更高版本):
select ...
from tbl_questions q
inner join tbl_answers a
on json_contains(replace(replace(q.answer,'"',''), a.answer_id)
我正在尝试加入 2 tables tbl_questions
和 tbl_answers
.
tbl_questions
包含 qid 和答案列
tbl_answers
存储 answerid 和 answerdesc 列。
tbl_questions 数据通过用 ["answer"] 封装并用逗号分隔来存储多项选择答案 ["16672","16673","16676"] any [=33= 】 多项选择题答案是这样存储的16688。 我必须报告此数据并且无法对任何多项选择题进行连接,可以理解地返回空白。
我已尝试 运行 table
上的以下内容REPLACE(REPLACE(REPLACE(answer,'"',''),'[',''),']','') FROM tbl_questions
这将清除对 16672,16673,16676 的多项选择答案 然后我用逗号分隔答案
SELECT Userid,SUBSTRING_INDEX(answer,',',1) as 'Option 1',
SUBSTRING_INDEX(SUBSTRING_INDEX(answer,',',2),',',-1) AS 'Option 2',
SUBSTRING_INDEX(SUBSTRING_INDEX(answer,',',-2),',',1) AS 'Option 3',
SUBSTRING_INDEX(answer,',',-1) AS 'Option 4'
FROM tbl_questions
这会创建新列选项 1 - 4,但仍然没有解决我的问题,因为单个答案出现在所有新列选项 1 -4 中。 我不觉得我为解决问题所采取的路线会奏效。 有谁知道我将如何加入论文 tables.
谢谢
您应该首先尝试修复您的架构,并有一个单独的 table 来存储每个问题的每个可能答案,每个 question/answer 元组一行。这将正确地表示您的实体之间的关系,并使查询更加容易和高效。
如果这不是您的选择,那么另一种选择是 find_in_set()
:
select ...
from tbl_questions q
inner join tbl_answers a
on find_in_set(
a.answer_id,
replace(replace(replace(q.answer,'"',''),'[',''),']','')
)
您也可以考虑使用 JSON 函数,因为 MySQL 可以理解您的字符串格式(这需要 MySQL 5.7 或更高版本):
select ...
from tbl_questions q
inner join tbl_answers a
on json_contains(replace(replace(q.answer,'"',''), a.answer_id)