我试图找到如何将以下MySQL查询转换为Zend Db表选择:
SELECT ColA,ColB,ColC
FROM MyTable
FORCE INDEX(ColA,ColB)
WHERE ColA = 'val0002'
AND ColB = 'val0045'
我尝试使用这样的东西:
$select = $dbTable->select()
->from('MyTable',array('ColA','ColB')
->forceIndex(array('ColA','ColB'))
->where("ColA = 'val0002'")
->where("ColB = 'val0045'");
我在论坛中找到了“forceIndex(array('ColA','ColB'))”,但它不起作用:(
感谢您帮助我:)
答案 0 :(得分:4)
我认为Zend_Db_Select
尚不支持它。这里似乎有一个改进请求:http://framework.zend.com/issues/browse/ZF-7570
(报告评论包含一些可能对您有用的代码链接)。
希望有所帮助,
答案 1 :(得分:1)
这是一个可以帮助解决问题的解决方案:
http://pastie.org/1354770
我们可以将以下两个方法添加到zend类“Zend_Db”中。我希望它会帮助你(但部分)。
/**
* Specify index to use
*
* @return Zend_Db_Select
*/
public function useIndex($index)
{
if(empty($this->_parts[self::FORCE_INDEX])) {
if(!is_array($index)) {
$index = array($index);
}
$this->_parts[self::USE_INDEX] = $index;
return $this;
} else {
throw new Zend_Db_Select_Exception("Cannot use 'USE INDEX' in the same query as 'FORCE INDEX'");
}
}
/**
* Force index to use
*
* @return Zend_Db_Select
*/
public function forceIndex($index)
{
if(empty($this->_parts[self::USE_INDEX])) {
if(!is_array($index)) {
$index = array($index);
}
$this->_parts[self::FORCE_INDEX] = $index;
return $this;
} else {
throw new Zend_Db_Select_Exception("Cannot use 'FORCE INDEX' in the same query as 'USE INDEX'");
}
}