Tp5 常用 比较字符

1.数据库 where 条件表; 参考 http://blog.youkuaiyun.com/haibo0668/article/details/78203170

eq = $map['id'] = array('eq',100); 等效于:$map['id'] = 100;
neq != $map['id'] = array('neq',100); id != 100
gt > $map['id'] = array('gt',100); id > 100
egt >= $map['id'] = array('egt',100); id >= 100
lt < $map['id'] = array('lt',100); id < 100
elt <= $map['id'] = array('elt',100); id <= 100
like like $map<'username'> = array('like','Admin%'); username like 'Admin%'
between between and $map['id'] = array('between','1,8'); id BETWEEN 1 AND 8
not between not between and $map['id'] = array('not between','1,8'); id NOT BETWEEN 1 AND 8
in in $map['id'] = array('in','1,5,8'); id in(1,5,8)
not in not in $map['id'] = array('not in','1,5,8'); id not in(1,5,8)
and(默认) and $map['id'] = array(array('gt',1),array('lt',10)); (id > 1) AND (id < 10)
or or $map['id'] = array(array('gt',3),array('lt',10), 'or'); (id > 3) OR (id < 10)
xor(异或) xor 两个输入中只有一个是true时,结果为true,否则为false,例子略。 1 xor 1 = 0
exp 综合表达式 $map['id'] = array('exp','in(1,3,8)'); $map['id'] = array('in','1,3,8');

多条件可用 $db->where()->where() 组合使用

### ThinkPHP 5 中 Join 的使用方法 在 ThinkPHP 5 中,`join` 是一种常用的数据库查询方法,用于实现多表联合查询。以下是 `join` 方法的具体用法及其示例。 #### 基本语法 `join` 方法可以通过链式调用来完成联表查询操作。其基本语法如下: ```php Db::table('main_table')->alias('a') ->join('related_table b', 'a.foreign_key = b.primary_key', 'INNER') ->select(); ``` - **第一个参数**:表示要连接的表名称以及别名。 - **第二个参数**:表示两个表之间的关联条件。 - **第三个参数(可选)**:表示连接的方式,默认为 `'INNER'`,也可以设置为 `'LEFT'`, `'RIGHT'` 或其他 SQL 支持的连接方式[^2]。 --- #### 示例代码 假设有一个用户表 (`think_user`) 和 订单表 (`think_order`),现在需要查询每个用户的订单数量。 ##### 查询语句 ```php $result = Db::table('think_user') ->alias('u') // 给主表起别名 u ->field('u.id, u.name, COUNT(o.order_id) as order_count') // 设置字段 ->join('think_order o', 'o.user_id = u.id', 'LEFT') // 左连接 orders 表 ->group('u.id') // 按照用户 ID 进行分组 ->select(); // 执行查询并返回结果集 ``` 上述代码实现了以下功能: 1. 将 `think_user` 表作为主表,并为其定义别名为 `u`; 2. 使用左连接 (`LEFT JOIN`) 将 `think_order` 表与 `think_user` 表进行关联,关联条件为 `o.user_id = u.id`; 3. 对结果按照用户 ID (`u.id`) 进行分组,并统计每个用户的订单数。 --- #### 多表联查复杂场景 如果涉及更多表的联接查询,则可以继续追加 `join` 调用。例如,增加一个地址表 (`think_address`) 来获取用户的收货地址信息。 ##### 查询语句 ```php $result = Db::table('think_user') ->alias('u') ->field('u.id, u.name, a.address, COUNT(o.order_id) AS order_count') ->join('think_order o', 'o.user_id = u.id', 'LEFT') ->join('think_address a', 'a.user_id = u.id', 'LEFT') ->where('u.status', '=', 1) // 只查询状态正常的用户 ->group('u.id') ->order('order_count DESC') // 按订单数量降序排列 ->limit(10) // 获取前 10 名用户 ->select(); ``` 此代码片段展示了如何在一个查询中同时处理三个表的数据,并支持复杂的过滤、排序和限制逻辑。 --- #### 解决临时表问题 当某些情况下需要对中间表进行预筛选时,可以直接通过子查询或者手动拼接 SQL 字符串的方式来解决问题。例如,在引用[4]中提到的场景下,可以采用以下解决方案: ##### 子查询方案 ```php $readCondition = '(SELECT id FROM tab_message_read WHERE status = 1)'; $result = Db::query("SELECT * FROM main_table LEFT JOIN {$readCondition} ON main_table.read_id = read_condition.id"); ``` 这种方式能够有效应对一些特殊需求下的联表查询[^4]。 --- ### 注意事项 1. 在设计联表查询时,应尽量减少不必要的列选择以提高性能。 2. 如果涉及到大数据量的操作,建议优化索引结构,避免全表扫描带来的效率损失。 3. 当使用 `LEFT JOIN` 或 `RIGHT JOIN` 时,需注意 NULL 值的处理。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值