我正在尝试找出如何搜索表的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%'
此方法有什么问题吗?
绝对没有做错什么,只要确保您的搜索词干净可防止(SQL注入)。
如果要检查标记中是否存在[[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']
不匹配),等等。