MYSQL:varchar json字段,查找带有值的键

问题描述 投票:0回答:1

所以在我的表中,我有一个名为“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 编写此代码,则加分)

php mysql json doctrine
1个回答
0
投票
SELECT JSON_CONTAINS(
  JSON_EXTRACT('{"activities":{"0":2,"2":7,"1":3}}', '$.activities.*'),
  '2','$');

$.activities
不存在时,这将返回 null。当在所需路径中找到 2 时返回 1,当未找到 2 时返回 0。

JSON_EXTRACT

(doc:json, path:char*)
path
中提取
doc
中指定的元素,可以使用通配符
*
来匹配任意键。

当在

(doc:json, val:any[, path:varchar]) 内的任何 candidate

 中找到 
path
 时,
JSON_CONTAINS
target
返回 1,未找到时返回 0,当任何参数为 null 时返回 null。

© www.soinside.com 2019 - 2024. All rights reserved.