Zend_Db_Seleccione orden por aleatorio, compatible en mssql / mysql
Bien, aquí está la situación, tengo una aplicación escrita en Zend_Framework, que es compatible con MySQL y MSSQL como backend. Ahora, ZF es bastante bueno resolviendo muchas de las discrepancias / diferencias de SQL entre los dos idiomas, pero todavía tengo que resolver este.
El objetivo es seleccionar 1 registro aleatorio de la tabla, que es una declaración extremadamente simple.
Aquí hay una declaración de selección, por ejemplo:
$sql = $db->select()
->from("table")
->order("rand()")
->limit(1);
Esto funciona perfectamente para las tablas de la base de datos MySQL, porque el sql para MySQL es el siguiente:
SELECT `table`.* FROM `table` ORDER BY rand() ASC
Ahora MSSQL por otro lado, usa elnewid () Función para hacer aleatorización.
¿Hay algún tipo de ayudante que pueda pasar a laorden() ¿Funciona para que se dé cuenta de que tiene que usar el orden correcto? Busqué en la documentación y en los foros, encontré algunos consejos, pero nada sólido.
Una de las cosas que encontré fue:
ORDEN POR ALEATORIO () no funciona - ZFForums.com
Están utilizando lo siguiente:
$res = $db->fetchAll(
'SELECT * FROM table ORDER BY :random',
array('random' => new Zend_Db_Expr('RANDOM()')
);
Funciona ... pero no busco compilar mi declaración de selección al escribirla y reemplazarla en la cadena. Intento mantenerla en el mismo objeto Zend_Db_Select. También he intentado pasar en elZend_Db_Expr('RANDOM()')
en el->order()
en la declaración, y falla. También publica una solución teórica para encontrar la respuesta, pero no estoy buscando reescribir la función en la que se encuentra, modificando la llamada $ db-> fetch ().
¿Algunas ideas?