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?