如何在tp的链式操作里使用mysql的强制索引函数(FORCE)呢?
开始以为tp不支持该函数,还打算用原生sql,结果看了数据库操作类,发现原来已有封装;
如下:这里我举例说tp3.2.3;
/**
* index分析,可在操作链中指定需要强制使用的索引
* @access protected
* @param mixed $index
* @return string
*/
protected function parseForce($index) {
if(empty($index)) return '';
if(is_array($index)) $index = join(",", $index);
return sprintf(" FORCE INDEX ( %s ) ", $index);
}
那么如何使用呢?
很简单,代码如下:
if(count($Sub_list) == 0){
$Map['cid'] = array('EQ',0);
}else{
$Map['uid'] = array('in',$Sub_list);
}
$Map['is_high_seas'] = array('EQ',0);//非公海客户
$Map['is_remove'] = array('EQ',0);//非移除客户
$Count = $this ->Customer_Model ->force('customer_count') ->where($Map) ->count("*");
注:force括号里写要强制使用的索引名称就可以了。
最后getLastsql()发现果然使用了customer_count索引,哈哈!