Zend_Db_Выбрать случайный порядок, совместимый в mssql / mysql
Хорошо, вот ситуация, у меня есть приложение, написанное на Zend_Framework, которое совместимо с MySQL и MSSQL в качестве бэкэнда. Теперь ZF довольно хорошо справляется с множеством различий / различий в SQL между двумя языками, но мне все еще предстоит выяснить это.
Цель состоит в том, чтобы выбрать 1 случайную запись из таблицы, что является чрезвычайно простым утверждением.
Вот оператор выбора, например:
$sql = $db->select()
->from("table")
->order("rand()")
->limit(1);
Это прекрасно работает для таблиц базы данных MySQL, потому что sql для MySQL выглядит следующим образом:
SELECT `table`.* FROM `table` ORDER BY rand() ASC
Теперь MSSQL, с другой стороны, используетNEWID () Функция, чтобы сделать рандомизацию.
Есть ли какой-то помощник, которого я могу передать взаказ() функция, чтобы заставить его понять, что он должен использовать правильный порядок? Я искал документацию и на zfforums, нашел несколько советов, но ничего солидного.
Одна из вещей, которые я нашел, была:
ЗАКАЗАТЬ ПО СЛУЧАЙНОМУ () не работает - ZFForums.com
Они используют следующее:
$res = $db->fetchAll(
'SELECT * FROM table ORDER BY :random',
array('random' => new Zend_Db_Expr('RANDOM()')
);
Это работает ... но я не собираюсь строить свой оператор select, набирая его и заменяя строку, я пытаюсь сохранить его в том же объекте Zend_Db_Select. Я также пытался пройти вZend_Db_Expr('RANDOM()')
в->order()
на заявлении, и это не удается. Он также публикует теоретическое решение для поиска ответа, но я не собираюсь переписывать функцию, в которой он находится, изменяя вызов $ db-> fetch ().
Есть идеи?