TP5框架中數據查詢格式有一種是:
$pawn_list = Db::name('jg_pawn')->alias("jp")->join('bs_pawn bp','jp.pawn_id=bp.pawn_id','LEFT')->join('bs_pawn_work bpw','bpw.pawn_id=jp.pawn_id','LEFT')->field("jp.jg_status,bp.pawn_name,bp.store_id,bp.store_name,bp.pawn_id,bp.pawn_no,bp.pawn_number,bp.wood_id,bpw.status")->limit($page->firstRow, $page->listRows)->where($where)->select();
其中$where為查詢條件,可以寫成$where['name']='張三';$where['sex']='男'........,但是這種寫法最后轉換成sql語句的時候條件是同時滿足的,也就是用的是AND鏈接詞,但是在使用這個查詢條件的時候我遇到了or條件查詢,并且有兩種需求:
需求一:一個字段可以滿足多個值的情況
比方說字段表中有一個字段為status,查表的時候他需要同時滿足:status=1 or status=2 or status=3,此時$where中應該怎么寫呢:
寫法為:$where['status']=array(['=','1'],['=','2'],['=','4'],'or');
需求二:一個值可以滿足多個字段的情況
比方說在搜索的時候,一個searchkey可以搜索姓名,也可以搜索編號:
此時的寫法為:$where['bp.pawn_name|bp.pawn_number'] = array('like', "%{$params['searchKey']}%");
上述的查詢方法轉換成原生的sql語句為:
SELECT `jp`.`jg_status`,`bp`.`pawn_name`,`bp`.`store_id`,`bp`.`store_name`,`bp`.`pawn_id`,`bp`.`pawn_no`,`bp`.`pawn_number`,`bp`.`wood_id`,`bpw`.`status` FROM `bs_jg_pawn` `jp` LEFT JOIN `bs_pawn` `bp` ON `jp`.`pawn_id`=`bp`.`pawn_id` LEFT JOIN `bs_pawn_work` `bpw` ON `bpw`.`pawn_id`=`jp`.`pawn_id` WHERE `jp`.`store_id` = '1' AND ( `bpw`.`status` = '1' or `bpw`.`status` = '2' or `bpw`.`status` = '4' ) AND ( `bp`.`pawn_name` LIKE '%1%' OR `bp`.`pawn_number` LIKE '%1%' ) LIMIT 0,10