Yii2 - 活动记录查询搜索字符串字段中的数字

Posted

技术标签:

【中文标题】Yii2 - 活动记录查询搜索字符串字段中的数字【英文标题】:Yii2 - active record query search for a number in a string field 【发布时间】:2017-09-02 11:45:25 【问题描述】:

我的表中有一个包含 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函数

use yii\db\Expression;
$expression = new Expression('JSON_CONTAINS(fied, value)');
$now = (new \yii\db\Query)->select($expression);  

p.s json_contains 从 MySQL 5.7 版本开始

参考https://dev.mysql.com/doc/refman/5.7/en/json-search-functions.html http://www.yiiframework.com/doc-2.0/yii-db-expression.html

【讨论】:

mariadb 有没有类似的?

以上是关于Yii2 - 活动记录查询搜索字符串字段中的数字的主要内容,如果未能解决你的问题,请参考以下文章

怎么从数据库中查询出一列包含有某个字的记录

如何使用代码点火器活动记录查询返回一维数组中的表字段

使用 LIKE 语句在 varchar 字段中搜索数字

动态 Sql- 活动字段搜索条件问题

sql语句包含怎么写

Yii2 : Active Record 添加 Not In 条件