繁体   English   中英

条件条件下的MySQL JSON数组

[英]MySQL JSON array in Where in condition

它正在工作,但仅返回一个Record。 我总共有5个。

Catalog.similar是json类型字段。 我从返回中删除[“”]并将其放在WHERE IN条件中。 但是我只有一张唱片。

SELECT * FROM similar_codes a WHERE a.id IN (SELECT REPLACE(SUBSTR(c.similar,2,LENGTH(c.similar)-2),'"','') FROM catalog c WHERE c.id=1)

从WHERE IN内部的select返回。

SELECT REPLACE(SUBSTR(c.similar,2,LENGTH(c.similar)-2),'"','') FROM catalog c WHERE c.id=1)

3380, 3382, 1952, 3384, 3383

与其尝试开发自己的搜索JSON的方法,不为什么不使用内置函数? 另外,如果您使用的MySQL版本不支持JSON数据,则最好使用链接表。

-- Create main table
CREATE TEMPORARY TABLE test (id INT(11));
INSERT INTO test (id) VALUES (3380), (3382), (1952), (3384), (3383);

-- Create JSON table
CREATE TEMPORARY TABLE test_search (id INT(11), similar JSON);
INSERT INTO test_search (id, similar) VALUES (1, JSON_ARRAY(3380, 3382, 1952, 3384, 3383));

-- Select
SELECT t.id 
FROM (SELECT similar AS ids FROM test_search WHERE id = 1) ts
INNER JOIN test t ON JSON_CONTAINS(ts.ids, CAST(t.id AS json), '$');

您可以使用GROUP_CONCAT()

SELECT * FROM similar_codes a WHERE a.id IN 
(SELECT GROUP_CONCAT(REPLACE(SUBSTR(c.similar,2,LENGTH(c.similar)-2),'"','')) FROM catalog c WHERE c.id=1)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM