如何从 MySQL json(或文本)列中查找特定值?行示例:
'profile': [{'name':['John', 'Smith'], 'interest':['Sports', 'Games']}]
在上面的示例中,我想在不指定键(“姓名”或兴趣)的情况下搜索“约翰”或“体育”。MySQL官方指南说你必须指定列名,但在我的情况下,最好不要选择列名。
如果表中有数十万行,另一个问题是搜索性能。
在 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 格式。
我找到了一种解决方案 - 在 MySQL 中使用全文搜索,可以使用关键字搜索 json 字符串。