Thinkphp中查詢復雜sql查詢表達式,如何表達MYSQL中的某字段不為空is not null?
先上兩種實現方式的實例:
$querys["house_type_image"] = array('NEQ','NULL'); //判斷字段不為空
//$querys["house_type_image"] = array('exp','is not null');//其中的exp表示MYSQL的表達式查詢,支持各種MYSQL語句的添加
-------------------------
Thinkphp中查詢復雜的情況需要使用查詢表達式,使用格式:
$map['字段名'] = array('表達式','查詢條件');
表達式不分大小寫,支持的查詢表達式有下面幾種,分別表示的含義是:
表達式 含義
EQ 等於(=)
NEQ 不等於(<>)
GT 大於(>)
EGT 大於等於(>=)
LT 小於(<)
ELT 小於等於(<=)
LIKE 模糊查詢
[NOT] BETWEEN (不在)區間查詢
[NOT] IN (不在)IN 查詢
EXP 表達式查詢,支持SQL語法
示例見Thinkphp的官方文檔。官方文檔中沒有查詢某字段為空的例子,試了試,方法如下
判定不為空:
$cond['pic']=array('NEQ','NULL'); //字段pic不為空
$list=$mod->where($cond)->order('id desc')->select();
判定為空:
$cond['pic']=array('EQ','NULL'); //字段pic為空
官方的文檔中沒有對應例子。
Thinkphp中如何表達MYSQL中的某字段不為空is not null?
Thinkphp 的文檔經常不夠完整的表達MYSQL的各種組合,很多東西需要被嘗試后才能知道,MYSQL查詢語句中有個表達式is not null ,在thinkphp中就不能用“=” 或者簡單的eq等來表示。
有一種變相的處理方法就是直接把where中的array參數換成string,即比如我要查詢某表的pic不為空
$data = D('tablename');
$data->where(“pic is not null”)->select();
而有時候我已經寫了一堆的array參數,實在不願意為了一個字段改變整體格式,
經過多次測試發現了TP還是支持MYSQL不為空的array編寫方式的,即:
$map['pic'] = array('exp','is not null');
其中的exp表示MYSQL的表達式查詢,支持各種MYSQL語句的添加。
該寫法同時支持在update中對字段進行自動增值:
SQL語句 update table set data=data+1;
用THINKPHP可以表達為
$data['data'] = array('exp','data+1');
$table->where(1)->save($data);
//$querys["house_type_image"] = array('exp','is not null');