left join生成的语句是 LEFT JOIN `fa_evaluate_invite` `evaluateinvte` ON `evaluate_organize`.`eo_id`=`evaluateinvte`.`ei_evaluate_id` 如果 我还需要在on后面加条件要怎么写 比如 LEFT JOIN `fa_evaluate_invite` `evaluateinvte` ON `evaluate_organize`.`eo_id`=`evaluateinvte`.`ei_evaluate_id` and `evaluateinvte`.`ei_ei_id` = 163
时间: 2023-07-13 09:09:36 浏览: 87
如果你需要在 `LEFT JOIN` 语句后面添加条件,你可以在 `ON` 子句中添加条件,例如:
```
LEFT JOIN `fa_evaluate_invite` `evaluateinvte` ON `evaluate_organize`.`eo_id`=`evaluateinvte`.`ei_evaluate_id` AND `evaluateinvte`.`ei_ei_id` = 163
```
这将会在 `LEFT JOIN` 语句中添加另一个条件,只有在 `evaluateinvte.ei_ei_id` 等于 163 时才会进行连接。
相关问题
LEFT JOIN `fa_evaluate_invite` `evaluateinvte` ON `evaluate_organize`.`eo_id`=`evaluateinvte`.`ei_evaluate_id` AND `evaluateinvte`.`ei_ei_id` = 163 用hasone 怎么写
使用 `hasOne` 可以这样写:
```php
class EvaluateOrganize extends Model
{
public function evaluateInvte()
{
return $this->hasOne(EvaluateInvite::class, 'ei_evaluate_id')->where('ei_ei_id', 163);
}
}
```
这样会定义一个名为 `evaluateInvte` 的关联关系,表示一个 `EvaluateOrganize` 模型对象拥有一个 `EvaluateInvite` 模型对象,且在关联查询时会自动关联上 `ei_evaluate_id` 和 `ei_ei_id = 163` 的条件。可以通过以下方式获取关联的 `EvaluateInvite` 模型对象:
```php
$organize = EvaluateOrganize::find(1);
$invte = $organize->evaluateInvte;
```
第一个SQL: SELECT orders.id,orders.user_id,orders.cityarea_id,orders.batchcode,orders.status, orders.pay_status,orders.real_pay,orders.total,orders.money,orders.pay_type, orders.premium,orders.createtime,orders.paytime,orders.confirmtime, orders.is_evaluate,orders.pay_method,orders.exp_user_id, orders.return_score, orders.is_change,orders.reward_money,orders.isvalid,orders.after_sale_status,orders.remark, orders.use_coupon_detail,orders.block_chain_price, users.name,users.weixin_name,users.weixin_fromuser, users.phone,wcoe.diy_area_name from wsy_o2o.weixin_cityarea_orders orders left join wsy_o2o.weixin_cityarea_supply supply on orders.cityarea_id = supply.id left join wsy_o2o.weixin_cityarea_payonline_orders wcco on orders.batchcode=wcco.batchcode left join wsy_user.weixin_users users on users.id = orders.user_id LEFT JOIN wsy_o2o.weixin_cityarea_orders_extend wcoe ON orders.batchcode = wcoe.batchcode WHERE orders.types=3 and orders.customer_id = 41 AND orders.isvalid=true GROUP BY orders.batchcode ORDER BY orders.id DESC limit 0,20; 第二个SQL: SELECT orders.id,orders.user_id,orders.cityarea_id,orders.batchcode,orders.status, orders.pay_status,orders.real_pay,orders.total,orders.money,orders.pay_type, orders.premium,orders.createtime,orders.paytime,orders.confirmtime, orders.is_evaluate,orders.pay_method,orders.exp_user_id, orders.return_score, orders.is_change,orders.reward_money,orders.isvalid,orders.after_sale_status,orders.remark, orders.use_coupon_detail,orders.block_chain_price, users.name,users.weixin_name,users.weixin_fromuser, users.phone,wcoe.diy_area_name ,writes.ActivityStatus,writes.NewMoney from wsy_o2o.weixin_cityarea_orders orders left join wsy_o2o.weixin_cityarea_supply supply on orders.cityarea_id = supply.id left join wsy_o2o.weixin_cityarea_payonline_orders wcco on orders.batchcode=wcco.batchcode left join wsy_user.weixin_users users on users.id = orders.user_id LEFT JOIN wsy_o2o.weixin_cityarea_orders_extend wcoe ON orders.batchcode = wcoe.batchcode LEFT JOIN wsy_dream.ShopWrite writes on orders.batchcode = writes.Batchcode WHERE orders.types=3 and orders.customer_id = 41 AND orders.isvalid=true GROUP BY orders.batchcode ORDER BY orders.id DESC limit 0,20; 为什么查询结果从0.7秒变成了3.7秒?
查询结果从0.7秒变成3.7秒可能是由于以下原因导致的:
1. SQL语句中的表连接(JOIN)操作过多:第二个SQL语句相较于第一个SQL语句多了一个表连接,即LEFT JOIN wsy_dream.ShopWrite writes on orders.batchcode = writes.Batchcode。表连接操作会增加查询的复杂度和执行时间。
2. 数据量增加:第二个SQL语句可能查询的数据量较第一个SQL语句更多,这会导致查询时间增加。
3. 索引缺失或失效:如果查询涉及的列没有合适的索引或索引失效,数据库会执行全表扫描,导致查询时间增加。
4. 数据库服务器负载增加:查询较繁忙的时候,数据库服务器的负载可能增加,导致查询时间延长。
为了确定具体原因,可以进一步分析数据库执行计划、索引情况以及服务器负载情况。
阅读全文