我知道在serialize
中搜索是不好的,但我遇到了这个问题。
我有一个名为Question的模型,包含一个序列化列assignments
id question_set_id assignments
1 1 {"12982": true, "12332": true}
2 2 {"12222": true, "12332": true}
3 3 {'11111': true}
我得到了一个名为group_ids
group_ids = ["12982","12332"]
我需要找到group_id
中至少包含一个assignments
的记录。
所以,这个例子的结果应该是
[
{
:id => 1,
:question_set_id => 1,
:assignments => {"12982": true, "12332": true}
},
{
:id => 2,
:question_set_id => 2,
:assignments => {"12222": true, "12332": true}
}
]
我已经尝试了
Question.where("assignments IS NOT NULL").where("assignments LIKE '%?%'", 12982)
似乎有效,但如何应用数组?
根据answer,我试过
Question.where("assignments IS NOT NULL").where("assignments= ?", groups_ids.to_yaml)
但是,它会返回一个空白数组。
答案 0 :(得分:0)
使用mysql 5.7。?您可以直接查询JSON数据。我没有尝试过,但是遵循类似
的文档Question.where("JSON_CONTAINS_PATH(assignments , 'one', '$[*].assignments.12982', '$[*].assignments.12332') == 1")
应该有效。您可以更进一步将列从文本转换为JSON数据类型,并获得json文档和优化存储的验证。