Zend_Db_Select ordem aleatória, compatível em mssql / mysql

Tudo bem, aqui está a situação, eu tenho um aplicativo escrito no Zend_Framework, que é compatível com o MySQL e MSSQL como backend. Agora, o ZF é muito bom em resolver muitas discrepâncias / diferenças de SQL entre os dois idiomas, mas ainda tenho que descobrir isso.

O objetivo é selecionar um registro aleatório da tabela, que é uma declaração extremamente simples.

Aqui está uma declaração select, por exemplo:

$sql = $db->select()
      ->from("table")
      ->order("rand()")
      ->limit(1);

Isso funciona perfeitamente para as tabelas de banco de dados MySQL, porque o sql para MySQL é o seguinte:

SELECT `table`.* FROM `table` ORDER BY rand() ASC

Agora, o MSSQL, por outro lado, usa onewid () função para fazer randomização.

Existe algum tipo de ajudante que eu possa passar para oordem() função, a fim de fazê-lo perceber que tem que usar o ordenamento adequado? Eu procurei na documentação e nos zfforums, encontrei algumas dicas, mas nada sólido.

Uma das coisas que encontrei foi:

ORDER BY RANDOM () não está funcionando - ZFForums.com

Eles estão usando o seguinte:

$res = $db->fetchAll(
'SELECT * FROM table ORDER BY :random',
array('random' => new Zend_Db_Expr('RANDOM()')
);

Ele funciona ... mas eu não estou olhando para construir minha instrução select, digitando-o e fazendo uma substituição na string, eu estou tentando mantê-lo no mesmo objeto Zend_Db_Select. Eu também tentei passar noZend_Db_Expr('RANDOM()') no->order() na declaração, e falha. Ele também publica uma solução teórica para encontrar a resposta, mas não estou procurando reescrever a função que está dentro, modificando a chamada $ db-> fetch ().

Alguma ideia?

questionAnswers(2)

yourAnswerToTheQuestion