我想创建一个简单的搜索引擎,可以计算与用户匹配的属性数量。
我使用 JSON 格式的字段来列出属性,当用户输入搜索时,它会作为数组获取。
我想将输入数组与 JSON 列表中匹配的属性数量进行比较。
并返回两列的整体:第一列包含匹配的标签数量。第二个包含已匹配的标签列表。
这是我正在尝试做的一个现实生活示例:
我想我必须结合使用 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
关于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/