如何使用和在MYSQL中查询JSON数组
如果我在mysql数据库的列中有如下json如何使用和在MYSQL中查询JSON数组,mysql,json,Mysql,Json,如果我在mysql数据库的列中有如下json [ { "name": "John", "checked": true }, { "name": "Lucy", "checked": false } ] 如何在mysql中选择同一对象名为'John'且checked=true的所有行 json对象可能有更多的键,并且键的顺序可能不特定。如果键的顺序始终相同,则可以尝试匹配字符串。假设您的专栏名为people SELECT IF(people LIKE '%[
[
{
"name": "John",
"checked": true
},
{
"name": "Lucy",
"checked": false
}
]
如何在mysql中选择同一对象名为'John'且checked=true的所有行
json对象可能有更多的键,并且键的顺序可能不特定。如果键的顺序始终相同,则可以尝试匹配字符串。假设您的专栏名为
people
SELECT
IF(people LIKE '%[
{
\"name\": \"John\",
\"checked\": true%', TRUE, FALSE) AS 'john_checked'
FROM table
WHERE (people LIKE '%[
{
\"name\": \"John\",
\"checked\": true%')
有了这个解决方案的知识,您可以创建一个较短的SQL,如下所示。您可以单独使用它,也可以将其用作将返回所有行的查询的where子句中的子查询
SELECT
IF(people LIKE '%\"checked\": true%', TRUE, FALSE) AS 'john_checked'
FROM table
WHERE (people LIKE '%\"name\": \"John\"%')
您可能会看到,JSON不适合存储在mySQL中
更好的解决方案是将数据库设计为关系型数据库,即有一个名为people
的附加表和一个链接数据的列。说到如何设计它,我需要更多地了解您的数据/主题,但您应该了解SQL“连接”和规范化
还有其他一些问题讨论mySQL中的JSON,例如和
在mySQL 5.7中,有一些与json相关的函数。请参阅,以及。以下是如何在postgresql中执行此操作:
create table users (data jsonb);'
insert into users values ('[{"name": "John", "checked": "true"}, {"name": "Lucy", "checked": "false"}]'),('[{"name": "John", "checked": "false"}, {"name": "Lucy", "checked": "false"}]'),('[{"name": "John", "checked": "false"}, {"name": "Lucy", "checked": "true"}]');
select * from users, jsonb_array_elements(users.data) obj
where obj->>'name' = 'John' and obj->>'checked' = 'true';
data | value
-----------------------------------------------------------------------------+-------------------------------------
[{"name": "John", "checked": "true"}, {"name": "Lucy", "checked": "false"}] | {"name": "John", "checked": "true"}
(1 row)
只需使用JSON,它包含:
SELECT * from `users`
WHERE JSON_CONTAINS(`data`, '{"name": "John","checked": true}');
如果你看一看这个问题,你会发现我说JSON对象可能有更多的键,它们的顺序可能不同。所以你做到了,希望我关于如何使用SQL匹配JSON的示例说明了它的困难。我链接了两个关于问题的详细信息的线程,它们倾向于使用noSQL提供建议。我对mySQL 5.7不太熟悉,但有一个链接。我不希望你的问题被完全忽略。谢谢,但我想知道,当任意数量的键可以按任何顺序排列时,是否有一种方法可以使用mySQL函数进行选择。我添加了第二个SQL代码段。从本质上讲,您最好是:如果行中包含
“name”:“John”
,则只获取该行,然后使用代码/脚本解码json;或者不在mySQL中存储json,而是创建一个包含更多表的关系数据库(或者使用noSQL解决方案)。只有您知道您要处理的解决方案。该代码段的问题是,它会找到John为false但Lucy为true的行。如果json为{“name”:John,“male”:true,“checked”:true},这是否有效?是的。它不依赖于其他字段或json/request中的字段顺序。太棒了,谢谢!第一次有人花时间回答我的一个老问题,所以我真的很感激!