MYSQL/JSON : compare an array with the list of a column in JSON format and count the number of terms that match

标签 mysql sql json search

我想创建一个简单的搜索引擎,可以计算与用户匹配的属性数量。

我使用 JSON 格式的字段来列出属性,当用户输入搜索时,它会作为数组获取。

我想将输入数组与 JSON 列表中匹配的属性数量进行比较。

并返回两列的整体:第一列包含匹配的标签数量。第二个包含已匹配的标签列表。

这是我正在尝试做的一个现实生活示例:

schema

我想我必须结合使用 JSON_SEARCH 和 COUNT,但我似乎找不到正确的语法......

最佳答案

一种选择是在整个键 (JSON_KEYS()) 内迭代选取 (JSON_EXTRACT()) match_list 数组的成员JSON,从第一个成员(index-0)开始直到数组的长度(JSON_LENGTH()),以便查找(JSON_CONTAINS())是否存在在 JSON 列 (tags) 中。我使用 information_schema.tables 来创建迭代,如以下查询所示:

SET @match_list = '["talkative","cooker"]';

SELECT COALESCE( SUM( matched), 0 ) AS match_count
  FROM 
  (
    SELECT  @i := @i + 1 AS rn,
            JSON_CONTAINS(JSON_KEYS(tags), 
                          JSON_EXTRACT(@match_list, CONCAT('$[',@i-1,']')),
                          '$') AS matched
      FROM information_schema.tables 
     CROSS JOIN t 
     CROSS JOIN (SELECT @i := 0) r
     WHERE @i < JSON_LENGTH(@match_list)
  ) q;

 match_count
 -----------
          2

Demo

关于MYSQL/JSON : compare an array with the list of a column in JSON format and count the number of terms that match,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64356494/

相关文章:

java - 创建数据库语句 - 数据库名称错误

mysql - 将批量数据 xlsx 导入 mysql?无法转换 xls

sql - 在 With 语句中选择 Null

mysql - 强制 SQL 结果填充缺失值

javascript - 如何从数据库中获取JSON数据?

json - 将变量传递给 aws cli 内联 json

javascript - 重构此 JSON 数据以转换为条形图数据

java - 以下 JDBC/MySQL 查询有什么问题

MYSQL - 选择过去 3 个月内未输入但在过去 6 个月内输入过的现有用户

mysql - 检查 mysql 不工作(没有错误)