thinkphp exp用法 必须搭配 Db::raw 用法

本文探讨了如何使用SQL查询筛选出URL分享次数为0或缺失的记录,这对于优化数据管理和网站运营具有实际意义。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

$where['url_share_num'] = ['exp',Db::raw("is null or url_share_num = 0")];

### 如何在 ThinkPHP 中正确使用 FIND_IN_SET 函数 #### 使用方法概述 在 ThinkPHP 框架中,可以利用 `where` 方法或者自定义 SQL 来调用 MySQL 的 `FIND_IN_SET()` 函数。以下是几种常见的实现方式。 --- #### 方式一:通过 `whereRaw` 实现 对于较新的版本(如 ThinkPHP 6 或者 ThinkPHP 8),可以直接使用 `whereRaw` 方法来构建复杂的查询条件: ```php $obj->whereRaw('FIND_IN_SET(:param, tags)', ['param' => $site_id]); ``` 上述代码表示,在字段 `tags` 中查找是否存在 `$site_id` 值。如果存在,则满足查询条件[^2]。 --- #### 方式二:通过 `Db::raw` 构建表达式 适用于 ThinkPHP 5 及其衍生版本,可以通过 `\think\Db::raw` 将原生 SQL 表达式嵌入到查询条件中: ```php $where[] = ['EXP', \think\Db::raw("FIND_IN_SET({$site_id}, site_ids)")]; $result = ExamModel::where($where)->select(); ``` 此代码片段的作用是从 `exam` 表中筛选出 `site_ids` 字段包含 `$site_id` 的记录[^1]。 --- #### 方式三:直接拼接字符串作为查询条件 另一种常见的方式是手动构造 `FIND_IN_SET` 查询语句并将其设置为 `_string` 类型的查询条件: ```php $where['_string'] = "FIND_IN_SET('{$attr_id}', object_ids)"; $data = ModelName::where($where)->select(); ``` 这种方式适合于简单的场景,但在复杂条件下可能不够灵活[^3]。 --- #### 完整示例代码 假设有一个模型名为 `ExamModel`,并且需要查询 `site_ids` 列表中包含特定值的数据,完整的代码如下所示: ```php use app\common\model\ExamModel; $site_id = 2; $where = [ 'status' => ['=', 2], ]; // 添加 FIND_IN_SET 条件 $where[] = ['EXP', \think\Db::raw("FIND_IN_SET({$site_id}, site_ids)")]; try { $exams = ExamModel::where($where)->select()->toArray(); success('返回成功', $exams); } catch (\Exception $e) { error('查询失败', $e->getMessage()); } ``` 以上代码实现了基于 `FIND_IN_SET` 的多条件联合查询,并将结果转换为数组形式输出。 --- #### 注意事项 1. **性能优化** 虽然 `FIND_IN_SET` 很方便,但由于它无法充分利用索引,因此当数据量较大时可能会导致性能下降。建议尽可能改用标准化的关系表设计替代存储逗号分隔的字符串列表[^4]。 2. **安全性** 如果输入参数来源于外部请求,请务必对其进行严格校验和转义处理,防止 SQL 注入攻击。 3. **兼容性** 不同版本的 ThinkPHP 对原始 SQL 支持程度略有差异,请根据具体框架版本调整语法结构。 --- ###
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

昊喵喵博士

大哥你真帅,小姐姐你真漂亮

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值