MySQL通过在数组字段中搜索来选择行,如果找到值,则选择该行

时间:2017-05-01 14:28:39

标签: php mysql

选择行有问题。拥有字段location_ids并且它具有值 - 例如 - ["13", "5", "25"]。我想在该字段中搜索,如果它找到了数字13,例如它选择一行

我发现可以使用FIND_IN_SET功能完成,但它对我不起作用SELECT * FROM staffs WHERE FIND_IN_SET(13, locations_ids)

也许可以用JSON函数完成?

感谢您的回答

3 个答案:

答案 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"%'