它看起来没有内置的方式好
在PHP中使用此代码完成这样做的问题仍然没有很好的答案,所以我想我会添加我的快速&肮脏的解决方案。如果您执行下面的代码,它将创建一个名为MY_JSON_INTERSECT的函数,它将输出与指定的原始海报完全相同的结果。请确保你已经在看这一点,是确定与信任我的代码之前创建一个新的功能:
delimiter $$
CREATE FUNCTION `MY_JSON_INTERSECT`(Array1 VARCHAR(1024), Array2 VARCHAR(1024)) RETURNS varchar(1024)
BEGIN
DECLARE x int;
DECLARE val, output varchar(1024);
SET output = '[]';
SET x = 0;
IF JSON_LENGTH(Array2) < JSON_LENGTH(Array1) THEN
SET val = Array2;
SET Array2 = Array1;
SET Array1 = val;
END IF;
WHILE x < JSON_LENGTH(Array1) DO
SET val = JSON_EXTRACT(Array1, CONCAT('$[',x,']'));
IF JSON_CONTAINS(Array2,val) THEN
SET output = JSON_MERGE(output,val);
END IF;
SET x = x + 1;
END WHILE;
IF JSON_LENGTH(output) = 0 THEN
RETURN NULL;
ELSE
RETURN output;
END IF;
END$$
然后,您可以调用该函数是这样的:
SELECT MY_JSON_INTERSECT('[1,2,3,4,5,6,7,8]','[0,3,5,7,9]');
输出:
[3,5,7]
这不是美丽或高效,但它的作品...希望更好的答案即将到来。
请说明你的sql表的结构 – Dimgold
@Dimgold没有表。这个问题已经更新了更多的细节。 – Yochanan
我相信sql不解析数组,你需要设置一个函数来比较使用[regex]的数组字符串(https://stackoverflow.com/questions/9099469/mysql-select-like-or-re- regexp-to-match-multiple-单词记录)或[分隔符](https://stackoverflow.com/questions/3914199/split-strings-using-mysql) – Abra001