Использование 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'");
}
}