【问题标题】:multiple join in codeigniter not working as expected多重加入codeigniter没有按预期工作
【发布时间】:2021-09-06 21:45:08
【问题描述】:

有4张桌子

option_group(id, optionGroupName)

category_optiongroup(categoryId, optionGroupId, inOrder)

product_option(productId, optionGroupId, optionId)

option(id, optionValue)

有些产品尚未在 product_option 表中插入其 optionValue 但我想获取所有主题是否已插入。 例如,具体产品的尺寸尚未设置。

这是我的模型,但它只返回所有设置的 optionValue。

是否有可能用 IFNULL() 做到这一点?如果没有也没关系

IFNULL(optionValue, '未设置')

$this->db->select('option.optionValue')
   ->from('category_optiongroup')
   ->where('categoryId', $data['categoryId'])
   ->join('product_option', 'product_option.productId='.$productId.
      ' AND product_option.optionGroupId=category_optiongroup.optionGroupId', 'left')
   ->join('option', 'option.id=product_option.optionId')
   ->order_by('category_optiongroup.inOrder', 'ASC');
$query = $this->db->get();
return $query;

【问题讨论】:

    标签: php mysql codeigniter-3


    【解决方案1】:

    两个提示:

    第一个:optionproduct_option 表都需要左连接

    第二个:当然 IFNULL() 需要一个别名来调用

    $this->db->select('IFNULL(`option`.`optionValue`, "Not Set") AS optionValue', FALSE)
       ->from('category_optiongroup')
       ->join('product_option', 'product_option.productId='.$productId
                .' AND product_option.optionGroupId=category_optiongroup.optionGroupId', 'left')
       ->join('option', 'option.id=product_option.optionId', 'left')
       ->where('categoryId', $data['categoryId'])
       ->order_by('category_optiongroup.inOrder', 'ASC');
    $query = $this->db->get();
    return $query;
    

    【讨论】:

    • 请添加更多详细信息以扩展您的答案,例如工作代码或文档引用。
    【解决方案2】:

    你可以像这样使用 IFNULL

    $this->db->select('IFNULL(`option`.optionValue,"Not Set")',false)
       ->from('category_optiongroup')       
       ->join('product_option', 'product_option.productId='.$productId.
          ' AND product_option.optionGroupId = category_optiongroup.optionGroupId', 'left')
       ->join('`option`', '`option`.id=product_option.optionId')
       ->where('categoryId', $data['categoryId'])
       ->order_by('category_optiongroup.inOrder', 'ASC');
    $query = $this->db->get();
    return $query;
    

    【讨论】:

    • 少了一个括号试试改代码
    • 现在当我想在控制器上返回结果时,我得到未定义的属性:stdClass::$optionValue
    • 即使这个不工作$this->db->select('option.optionValue') ->select('IFNULL(option.optionValue, "Not Set")', FALSE).(未定义属性的错误消失了,但没有像以前那样显示整个选项组)
    • IFNULL 使用与否无所谓,请大家给出正确答案
    • 你在 where cvlause 后面添加了 jojn s,说明 ios 错误,它必须在 order 之前和 joins 之后
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-03-15
    • 2012-04-25
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多