选择行有问题。拥有字段location_ids
并且它具有值 - 例如 - ["13", "5", "25"]
。我想在该字段中搜索,如果它找到了数字13,例如它选择一行
我发现可以使用FIND_IN_SET
功能完成,但它对我不起作用SELECT * FROM staffs WHERE FIND_IN_SET(13, locations_ids)
也许可以用JSON函数完成?
感谢您的回答
答案 0 :(得分:1)
在这种情况下你应该使用正则表达式。这是用于在json包含的列中搜索。它也适用于你的情况。
WHERE locations_ids REGEXP '[[:<:]]13[[:>:]]'
答案 1 :(得分:1)
FIND_IN_SET(13, locations_ids)
为locations_ids
, '13, 5, 25'
将有效。但是使用您的格式,您可以使用
JSON_CONTAINS(location_ids, '"13"')
演示:http://rextester.com/HLLY47255
请注意,这两种方法都不能使用索引进行快速搜索。使用规范化架构,您的查询可以是:
SELECT s.*
FROM staffs s
JOIN staffs_locations sl ON sl.staff_id = s.id
WHERE sl.location_id = 13;
即使有数百万行(如果定义了propper索引),这也会立即返回结果。
答案 2 :(得分:0)
为什么不重新格式化数组并使用IN?
SELECT *
FROM staffs
WHERE locations_ids in (13,5,25)
如果locations_ids包含 [&#34; 13&#34;,&#34; 5&#34;,&#34; 25&#34;] ,请尝试以下操作:
SELECT *
FROM staffs
WHERE locations_ids like '%"13"%'