LEFT JOIN `fa_evaluate_invite` `evaluateinvte` ON `evaluate_organize`.`eo_id`=`evaluateinvte`.`ei_evaluate_id` AND `evaluateinvte`.`ei_ei_id` = 163 用hasone 怎么写
时间: 2023-06-28 18:13:02 浏览: 97
使用 `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;
```
相关问题
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
如果你需要在 `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 时才会进行连接。
SELECT a.id FROM ex_exam a LEFT JOIN ex_exam_statistic_enp_evaluate b ON a.id = b.qlh_exam_id WHERE a.type IN ("EXAM_EX_NORMAL_TYPE_NORMAL", "EXAM_TYPE_RZ") AND b.qlh_exam_id IS NULL 优化一下
该查询语句已经比原来的语句进行了优化,但是还可以进一步优化。以下是一些可能的优化方案:
1. 添加索引
可以为 ex_exam 表和 ex_exam_statistic_enp_evaluate 表的相关字段添加索引,以提高查询效率。例如,可以为 ex_exam 表的 type 字段添加索引,为 ex_exam_statistic_enp_evaluate 表的 qlh_exam_id 字段添加索引。
2. 分批处理
如果查询的数据量过大,可以将查询结果分批处理,以减少单次查询的数据量。可以使用 LIMIT 和 OFFSET 关键字来实现分批查询,例如:
```
SELECT a.id
FROM ex_exam a
LEFT JOIN ex_exam_statistic_enp_evaluate b ON a.id = b.qlh_exam_id
WHERE a.type IN ("EXAM_EX_NORMAL_TYPE_NORMAL", "EXAM_TYPE_RZ") AND b.qlh_exam_id IS NULL
LIMIT 10000 OFFSET 0;
```
该语句每次查询 10000 条记录,并通过 OFFSET 关键字来指定查询的起始位置。可以多次执行该语句,直到查询完所有符合条件的记录为止。
3. 使用 EXISTS
可以使用 EXISTS 关键字来代替 LEFT JOIN 和 IS NULL,例如:
```
SELECT a.id
FROM ex_exam a
WHERE a.type IN ("EXAM_EX_NORMAL_TYPE_NORMAL", "EXAM_TYPE_RZ") AND NOT EXISTS (
SELECT 1
FROM ex_exam_statistic_enp_evaluate b
WHERE a.id = b.qlh_exam_id
)
```
该语句的效率与使用 LEFT JOIN 的语句类似,但是使用 EXISTS 更加简洁明了。
阅读全文