php MySQL查询WHERE IN for json array [duplicate]

zynd9foi  于 2023-05-27  发布在  PHP
关注(0)|答案(1)|浏览(133)

此问题已在此处有答案

How to search JSON data in MySQL?(10个答案)
How to search JSON array in MySQL?(11个答案)
MySQL JSON - using IN statement | json_contains(4个答案)
MySQL Filter JSON_CONTAINS Any value from Array(3个答案)
MySQL how to search JSON Array or JSON_CONTAINS in where statement with column name(1个答案)
昨天关门了。
我将一个列的数据保存为json格式:

{"sp_id": [1, 2,113],"spd_id": [],"spclg_id": []}

我想使用WHERE IN检查sp_id字段是否包含以下值 数组中指定的
例如,我想检查给定值是否至少出现一次 在u_id数组中。

  • sp_id的至少一个元素必须匹配
  • 必须在MySQL中
  • mysql版本:5.7.40

在PHP中,它看起来像这样:

if(count(array_intersect($needle, $haystack)))
q3qa4bjr

q3qa4bjr1#

您可以使用JSON_CONTAINS函数,不幸的是,它有一些限制。您需要逐个检查项目:

-- e.g. when you need to check if [1, 9] intersects

WHERE JSON_CONTAINS('{"sp_id": [1, 2, 113], "spd_id": [], "spclg_id": []}', '1', '$.sp_id') -- true
OR    JSON_CONTAINS('{"sp_id": [1, 2, 113], "spd_id": [], "spclg_id": []}', '9', '$.sp_id') -- false

更好的解决方案是使用JSON_TABLE,它需要MySQL 8或更高版本:

SELECT *
FROM t
WHERE id IN (
    SELECT id
    FROM JSON_TABLE(t.json, '$.sp_id[*]' COLUMNS(
        val INT PATH '$'
    )) AS x
    WHERE val IN (1, 9)
)

DB<>Fiddle

相关问题