如果我在mysql数据库的列中有如下json
[
{
"name": "John",
"checked": true
},
{
"name": "Lucy",
"checked": false
}
]
如何在mysql中选择同一对象名为'John'且checked=true的所有行。
json对象可能有更多的键,并且键可能没有特定的顺序。
下面是如何在postgreql中完成:
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)
如果键的顺序始终相同,则可以尝试匹配字符串。假设您的专栏名为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“连接”和规范化。
还有其他问题,讨论JSON在MySQL中,如存储JSON在数据库与有一个新的列为每个键和存储数据在MySQL作为JSON
在MySQL 5.7中,有一些与json相关的函数。请参阅这篇文章和mySQL留档。
只需使用JSON,它包含:
SELECT * from `users`
WHERE JSON_CONTAINS(`data`, '{"name": "John","checked": true}');
问题内容: 如何在MySql中运行此查询? 它会显示如下错误消息: 问题答案: 该语句/方法适用于PostgreSQL和Sybase(我想可能还有更多),所以也许您可以看一下: http://www.artfulsoftware.com/mysqlbook/sampler/mysqled1ch20.html 它应该向您展示一些使用MySQL的方法(以及PHP中的一两个方法,我只知道它不在您的标签列
想知道如何看待mysql json专栏? category_ids例如) [19, 102, 108] 如果我想搜索包含类别id 102的产品列表,如何使用queryDSL进行查询? 我尝试了JsonNode类型,但它不起作用。
问题内容: 我想查询mysql数据库中的表以获取切片值: 但是我得到这个错误: 我怎样才能解决这个问题? 问题答案: sqlx为此提供了很好的帮助:在In()中,我们只需要使用args和Rebind准备查询,如下所示: 另外,我建议您在这里看看:http : //jmoiron.github.io/sqlx/有很多示例,包括 IN
问题内容: 我正在尝试使用数组查询MySQL数据库,但是遇到了麻烦! 我有一个名为客户的表,我希望能够从“扇区”列等于$ sectorlink的所有行中选择“名称”。 然后,我想将所有名称放入数组,以便执行下一个查询:从另一个表中选择所有行,这些表的“ client”列等于从第一个查询返回的名称之一。我做错了,因为它返回了致命的SQL错误。我对所有变量感到困惑! $ sectorlink和$ co
问题内容: 我正在尝试使用 Java 和 Elasticsearch 进行Elasticsearch搜索。elasticsearch为Java提供了API,这很酷。 问题是,我希望在Java中创建一个方法,该方法接收一个字符串(应该是一个包含用于搜索的信息的JSON),该字符串反映此对Elasticsearch的HTTP调用 但是我希望这种方法尽可能通用。 所以问题是: 是否可以使用Java AP
问题内容: 我有下表 因此,如何从“杂项”列中检索product_name,image_path和仅“ group_id”值(如“ 40067”)。 我在下面的查询中尝试过,但在“杂项”列中返回1/0。 有人知道该怎么做吗? 问题答案: 该函数仅返回0或1。您将不得不使用其他字符串函数。 试试这个:。但这假设group_id始终具有5个字符。 因此,这是更好的:。 这里是一个小提琴,以显示它的工作