0

如何从 MySQL json(或文本)列中查找特定值?行示例:

'profile': [{'name':['John', 'Smith'], 'interest':['Sports', 'Games']}]

在上面的示例中,我想在不指定键(“姓名”或兴趣)的情况下搜索“约翰”或“体育”。MySQL官方指南说你必须指定列名,但在我的情况下,最好不要选择列名。

如果表中有数十万行,另一个问题是搜索性能。

4

2 回答 2

1

在 MySQL 5.7 及更高版本中使用JSON_SEARCH()函数。它将 JSON 文档中的路径返回到您正在搜索的值:

mysql> set @j = '{"profile": [{"name":["John", "Smith"], "interest":["Sports", "Games"]}]';

mysql> select json_search(@j, 'one', 'John') as path;
+------------------------+
| path                   |
+------------------------+
| "$.profile[0].name[0]" |
+------------------------+

但如果您需要搜索值,我建议使用普通列而不是 JSON。换句话说,您永远不应该在WHERE查询的子句中引用 JSON 列。

在这种情况下,您应该有这样的表:

CREATE TABLE profile (
 id SERIAL PRIMARY KEY,
 first_name VARCHAR(24) NOT NULL,
 last_name VARCHAR(24) NOT NULL
);

CREATE TABLE profile_interests (
 id SERIAL PRIMARY KEY,
 profile_id BIGINT UNSIGNED NOT NULL,
 interest VARCHAR(24) NOT NULL,
 FOREIGN KEY (profile_id) REFERENCES profile(id)
);

然后使用查询来搜索您想要的列。

PS:我修复了您 JSON 文档中的引号。您使用了单引号,'但您必须使用双引号"才能使其成为有效的 JSON 格式。

于 2020-07-28T01:39:47.237 回答
0

我找到了一种解决方案 - 在 MySQL 中使用全文搜索,可以使用关键字搜索 json 字符串。

于 2020-07-28T01:31:26.230 回答