Mysql 5.7.27:搜索JSON数组

问题描述 投票:0回答:2

我正在尝试找出如何搜索表的JSON数组列。我找到了this Stackoverflow question,但不清楚JSON_SEARCH的工作方式。

答案中,人们似乎正在提供JSON_SEARCH直接数据以进行搜索:

SELECT JSON_SEARCH('["1","2","3","4","5"]', 'one', "2")

但是由于我正在搜索,所以实际上没有数组["1","2","3","4","5"]

我正在这样创建搜索查询:

SELECT * FROM `server_list` 
WHERE
    `server_version` LIKE '%%'
AND
    `server_name` LIKE '%%'
AND 
    `server_slots` > 1500
AND
    `server_slots` < 4000

如何在同一查询中搜索特定标签?沿途:

AND
    JSON_SEARCH(`server_tags`, ['1', '2', '3'])

server_tags是我要搜索的列,['1', '2', '3']是我要搜索的多个标签。

编辑:我刚刚意识到JSON列只是字符串,这使我可以执行此操作:

SELECT * FROM `lista_server` 
    `server_tags` LIKE '%value%'
    OR `server_tags` LIKE '%value2%'

此方法有什么问题吗?

mysql sql search
2个回答
0
投票

绝对没有做错什么,只要确保您的搜索词干净可防止(SQL注入)。


0
投票

如果要检查标记中是否存在[[any,则可以将它们各自的OR结果JSON_SEARCH放在一起:

JSON_SEARCH
要检查它们

all

是否存在,只需AND (JSON_SEARCH(server_tags, 'one', '1') IS NOT NULL OR JSON_SEARCH(server_tags, 'one', '2') IS NOT NULL OR JSON_SEARCH(server_tags, 'one', '3') IS NOT NULL ) 一起搜索:AND
请注意,尝试以文本形式进行搜索可能无法正常工作,JSON数组中的值可能与测试字符串中的值顺序不同(例如AND (JSON_SEARCH(server_tags, 'one', '1') IS NOT NULL AND
     JSON_SEARCH(server_tags, 'one', '2') IS NOT NULL AND
     JSON_SEARCH(server_tags, 'one', '3') IS NOT NULL
    )
['1', '2']不匹配),或者长度JSON数组的值可能不同(例如['2', '1']['1', '2']不匹配),等等。
© www.soinside.com 2019 - 2024. All rights reserved.