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

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

2 голосов
/ 16 сентября 2011

Я пытаюсь найти, как перевести следующий запрос 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(массив ('ColA', 'ColB')) "на форуме, но он не работает :(

и спасибо, что помогли мне :)

Ответы [ 2 ]

4 голосов
/ 16 сентября 2011

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

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

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

1 голос
/ 22 сентября 2011

вот решение, которое может помочь заинтересованной проблеме:
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'");
    }
}
...