使用FORCE INDEX和zend

时间:2011-09-16 09:27:32

标签: mysql zend-framework zend-db

我试图找到如何将以下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'))”,但它不起作用:(

感谢您帮助我:)

2 个答案:

答案 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'");
    }
}