0

supplier:供应商
dealer:经销商

select * from table
where
    if(supplier!=0){            //当供应商不为0时,goods_id使用供应商的goods_id 
        goods_id=supplier_goods
    }
    else(dealer!=0){           //当经销商不为0时,goods_id使用经销商的goods_id      
        goods_id=dealer_goods 
    }
    

可以有这种写法吗? tp中又该怎么写?

7个回答

0

已采纳

//大概这样,只是个大概:
if($supplier !==0 ){ //当供应商不为0时,goods_id使用供应商的goods_id

    $where = 'goods_id=supplier_goods';

}else($dealer !== 0){ //当经销商不为0时,goods_id使用经销商的goods_id

    $where = 'goods_id=dealer_goods'; 

}
$data = $mysql->query("select * from table where {$where}");
建议将判断逻辑放在前面,让SQL一目了然

1

$where['goods_id'] = ($supplier != 0) ? $supplier_goods : $dealer_goods;

Db::table('table')->where($where)->select();
0

定义一个变量来存储你的两个条件,把这个变量放在where后

0

1.将条件直接写在where里面;
2.将条件写在变量,然后where里面是该变量;
3.直接用query。

0

你直接在外面把变量的值判断好,然后查询的时候把变量写进去不是美滋滋吗

0

用个三目运算就OK了

-1

可怜的TP,没有when
在你的模型类中添加when方法

    public function when($value, $callback, $default = null)
    {
        if ($value) {
            return $callback($this, $value) ?: $this;
        } elseif ($default) {
            return $default($this, $value) ?: $this;
        }

        return $this;
    }

使用方法:

DB::table('users')
    ->when($supplierId, function ($query) use ($supplierId) {
        return $query->where('goods_id', $supplierId);
    }, function ($query) use ($dealerId) {
        return $query->where('goods_id', $dealerId);
    })
    ->select();

只是大概的样子,我没测试过,也不知道到底行不行。

撰写答案