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 ().

Есть идеи?

Ответы на вопрос(2)

Ваш ответ на вопрос