所以在我的表中,我有一个名为“data”的列,即 varchar(3000)。
这基本上是一个 json blob,这是它所包含内容的示例:
{"homeWidgetToShow":"chat_and_notes","official":false,"nationalFederation":false,"categories":[],"activities":{"0":2,"2":7,"1":3},"clubsBlackList":[],"privateMembers":false,"alwaysShowDescription":false,"restrictMembersFromPositingForums":false}
现在我需要进行一个查询,基本上查找
data.activities
内是否有一个值为 3 的键。
在这个键中,我们看到有一个键“1”,其值为 3,因此它应该匹配。
需要注意的是,有时可能无法设置活动键,而且它并不总是位于值为“1”的键上。
如何实现这一目标?谢谢社区! (如果有人知道如何使用 Doctrine 和 PHP 编写此代码,则加分)
SELECT JSON_CONTAINS(
JSON_EXTRACT('{"activities":{"0":2,"2":7,"1":3}}', '$.activities.*'),
'2','$');
当
$.activities
不存在时,这将返回 null。当在所需路径中找到 2 时返回 1,当未找到 2 时返回 0。
(doc:json, path:char*)
从path
中提取doc
中指定的元素,可以使用通配符*
来匹配任意键。
当在 (doc:json, val:any[, path:varchar])
内的任何 candidate
中找到
path
时,
JSON_CONTAINS
target
返回 1,未找到时返回 0,当任何参数为 null 时返回 null。