我在处理MySQL中的JSON字段方面还很陌生。我遇到的所有解决方案都处理具有键/值的对象。无法找到处理JSON数组的数组。

无论如何,我想做的是能够选择interestIds包含2的所有行。我怎么做?谢谢。

用户表

+----+-------------+
| id | interestIds |
+----+-------------+
|  1 | [1, 2]      |
|  2 | [3, 2]      |
|  3 | [2, 4]      |
+----+-------------+


样本测试查询:

SET @userId = 2;
SELECT * FROM Users
WHERE @userId IN JSON_CONTAINS(@user, interestIds, '$[1]');


我对如何使用JSON_*函数感到困惑;不知道要为第三个参数输入什么...

最佳答案

您可以使用JSON_CONTAINS使用以下解决方案:

SELECT *
FROM Users
WHERE JSON_CONTAINS(interestIds, '2') = 1;


第三个(可选)参数path使您可以仅在JSON值的特定部分上使用此功能。因此,以下示例检查2是否为数组的第二个值:

SELECT *
FROM test
WHERE JSON_CONTAINS(interestIds, '2', '$[1]') = 1;


demo on dbfiddle.uk

08-07 20:47