使用Json格式将ID存储在DB中
'["1454","474","545"]'
我可以构建列表ID:
SELECT replace
(replace(
replace(
replace('["1454","474","545"]','[','\'')
,']','\'')
,'"','')
,',','\',\'')
mySql返回'1454','474','545'
但是当我尝试从这个ID构建列表中列出数据库记录时:
SELECT col FROM table WHERE col in (REPLACE
(REPLACE(
REPLACE(
REPLACE('["1454","474","545"]','[','\'')
,']','\'')
,'"','')
,',','\',\''));
即使我在第一个“REPLACE”之前添加了“SELECT”,mySql也会说“0记录”
有任何帮助吗?
答案 0 :(得分:0)
尝试以下查询,您还需要在in子句中添加select:
SELECT col FROM table WHERE col in (select REPLACE
(REPLACE(
REPLACE(
REPLACE('["1454","474","545"]','[','\'')
,']','\'')
,'"','')
,',','\',\''));
答案 1 :(得分:0)
唉,您不能将in
与逗号分隔的字符串一起使用。它需要一个元素列表,但不在字符串中。所以,这可以按预期工作:
where x in (1,2,3)
这不会像你期望的那样工作(虽然它确实可以正常工作;
where x in ('1,2,3')
这会查找x的一个值,即字符串'1,2,3'
。
解决方案是使用MySQL函数find_in_set()
:
SELECT col
FROM table
WHERE find_in_set(col, REPLACE(REPLACE(REPLACE('["1454","474","545"]', '[','\''
), ']', '\''
), '"', ''
), ',', '\',\''
);
老实说,你可能会更喜欢这样的事情:
where '["1454","474","545"]' like concat('%;', col, '&%')