通過選擇行有問題。有字段location_ids
,它有價值例如 - ["13", "5", "25"]
。我想在這一領域的搜索,如果它開創13號例如,它選擇一行MySQL通過在數組字段中搜索來選擇行,如果找到值,則選擇該行
我發現它可能與FIND_IN_SET
函數來完成,但它並沒有爲我工作SELECT * FROM staffs WHERE FIND_IN_SET(13, locations_ids)
也許這可能是用JSON函數完成?
感謝您的回答
通過選擇行有問題。有字段location_ids
,它有價值例如 - ["13", "5", "25"]
。我想在這一領域的搜索,如果它開創13號例如,它選擇一行MySQL通過在數組字段中搜索來選擇行,如果找到值,則選擇該行
我發現它可能與FIND_IN_SET
函數來完成,但它並沒有爲我工作SELECT * FROM staffs WHERE FIND_IN_SET(13, locations_ids)
也許這可能是用JSON函數完成?
感謝您的回答
你應該在這種情況下,使用正則表達式。這是我用來搜索json包含的列。它也適用於你的情況。
WHERE locations_ids REGEXP '[[:<:]]13[[:>:]]'
真棒:),完美的作品:)謝謝。 –
爲什麼不重新格式化數組並使用IN?
SELECT *
FROM staffs
WHERE locations_ids in (13,5,25)
如果locations_ids包含[ 「13」, 「5」, 「25」],試試這個:
SELECT *
FROM staffs
WHERE locations_ids like '%"13"%'
我無法重新設置字段值的格式。而我只有一個數字,例如5,我需要找到具有該字段location_ids中的數字的行。 –
所以列位置標識包含方括號列表? –
是的,它包含括號 –
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索引定義),這將幾乎瞬間甚至數百萬行的返回結果。
聽起來像你應該規範你的分貝。 –