Использование FORCE INDEX с Zend

Я пытаюсь найти, как перевести следующий запрос MySQL в Zend Db Table Select:

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 ответа

Решение

Я думаю Zend_Db_Select пока не поддерживает Похоже, здесь есть запрос на улучшение: http://framework.zend.com/issues/browse/ZF-7570

(Комментарии к отчету содержат несколько ссылок на код, который может быть полезен для вас).

Надеюсь, это поможет,

Вот решение, которое может помочь интересующимся проблемой:
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'");
    }
}
Другие вопросы по тегам