【问题标题】:Left Join not showing null records in Active Record Yii左连接在 Active Record Yii 中不显示空记录
【发布时间】:2023-03-20 10:24:01
【问题描述】:

我知道之前可能会问到这个问题,并且我已经应用了那里提到的修复,但它们不起作用。

这是我的问题:

我有两个表要加入并获取结果。

  1. 任务(id、状态、task_type_id)
  2. task_type (id, task_type_name)

task_type 与 task 之间存在一对多的关系。

我的要求:

我想获取用户创建的所有任务,按他们的 task_type_id 分组并且当前不完整。

这是我尝试过的:

$criteria = new CDbCriteria();
    $criteria->select = "t.*, t2.task_type_id,count(t2.task_type_id) as total";
    $criteria->join = "LEFT JOIN task t2 on t.id=t2.task_type_id";
    $criteria->condition = "t.user_id=" . $user_id . " OR t.user_id is NULL";
    $criteria->addCondition("t2.user_id=" . $user_id);
    $criteria->addCondition("t2.status='Incomplete'");
    $criteria->group = "t.id";
    $criteria->order = 'total desc';
    $task_types = TaskType::model()->findAll($criteria);

它返回一切正确但未显示 task_type 表的空值。即它只显示那些任务确实存在的task_type。它不显示不存在 task_type 的 task_type。我想要任务存在或不存在的所有 task_types。

有人可以建议修复吗?我使用了左连接,它应该返回两种类型的 task_types 但它不起作用。

【问题讨论】:

  • 看起来您需要使用 LEFT JOIN 并将 WHERE 更改为 AND
  • 已经使用了 LEFT JOIN 以及在哪里更改“哪里”?条件属性被翻译到活动记录中的位置

标签: mysql sql join yii left-join


【解决方案1】:

用后面的语句更新下面

$criteria->condition = "t.user_id=" . $user_id . " OR t.user_id is NULL";

$criteria->condition = "COALESCE(t.user_id,1)=" . COALESCE($user_id,1). ";

【讨论】:

    【解决方案2】:

    t2 上的条件在左连接后被激活。将它们更改为 Left Join On 子句的一部分,因此如果不满足,它们将不会从数据集中删除记录。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-01-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多