【问题标题】:MYSQL/JSON: compare an array with the list of a column in JSON format and count the number of terms that matchMYSQL/JSON:将数组与 JSON 格式的列列表进行比较,并计算匹配项的数量
【发布时间】:2020-10-14 15:19:04
【问题描述】:

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

我正在使用一个 JSON 格式的字段来列出属性,当用户输入搜索时,它会以数组的形式获取。

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

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

这是我正在尝试做的一个真实的例子:

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

【问题讨论】:

    标签: mysql sql json search


    【解决方案1】:

    一个选项是在 JSON 的整个键 (JSON_KEYS()) 中迭代地选取 (JSON_EXTRACT()) match_list 数组的成员,从第一个成员 (index-0) 开始直到长度 (@987654325 @) 以查找 (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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2023-02-23
      • 1970-01-01
      • 2020-05-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多