我有一个字符串字段,在我的表中包含一个json字符串 . 让我们说出tbl_table
让我们说它有这3条记录:
id json
----------------
1 [123,45,1]
2 [23,4,5]
3 [7,8,9]
现在我想获取在json字段中包含数字的记录(使用Yii2中的活动记录),所以:
$res = Table::find()->where(['like','json','23'])->all();
此查询返回以下记录:
id json
----------------
1 [123,45,1]
2 [23,4,5]
这实际上不是一个错误的结果,但我想要的是只返回 id=2
的记录 . 我怎样才能做到这一点?
等 ['like','json','5']
或 ['like','json','4']
等等?数字相似,但我希望确切的数字匹配 .
另一个问题我希望最后一个问题回答这个部分的变化 ['like','json',[4,5,6]]
. 换句话说,我想将一个数组传递给like运算符,它会自动为每个元素进行OR运算 . 它有可能吗?如果不是,我如何迭代数组并使用最后一个问题功能制作多个Or_like条件而无需执行多个查询?
1 回答
使用表达式来使用mysql函数并使用JSON_CONTAINS函数
p.s json_contains从MySQL 5.7开始
refs https://dev.mysql.com/doc/refman/5.7/en/json-search-functions.html http://www.yiiframework.com/doc-2.0/yii-db-expression.html