Zend_Db_Select order by random, compatible in mssql / mysql

Dobra sytuacja, mam aplikację napisaną w Zend_Framework, która jest kompatybilna zarówno z MySQL, jak i MSSQL jako backendem. Teraz ZF jest całkiem niezły w rozwiązywaniu wielu rozbieżności / różnic SQL między tymi dwoma językami, ale wciąż jeszcze tego nie rozumiem.

Celem jest wybranie 1 losowego rekordu z tabeli, co jest niezwykle prostym stwierdzeniem.

Oto instrukcja wyboru, na przykład:

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

Działa to doskonale dla tabel bazy danych MySQL, ponieważ sql dla MySQL jest następujący:

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

Z drugiej strony MSSQL używanewid () funkcja do zrobienia randomizacji.

Czy jest jakiś pomocnik, który mogę przekazaćzamówienie() funkcja, aby uświadomić sobie, że musi użyć właściwego porządku? Przeszukałem dokumentację i suwaki, znalazłem kilka wskazówek, ale nic solidnego.

Jedną z rzeczy, które znalazłem było:

ZAMÓWIENIE PRZEZ RANDOM () nie działa - ZFForums.com

Używają następujących:

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

Działa ... ale nie staram się budować mojej instrukcji select, wpisując ją i wykonując zamianę na łańcuchu, staram się zachować go w tym samym obiekcie Zend_Db_Select. Próbowałem też przejść przezZend_Db_Expr('RANDOM()') w->order() na oświadczeniu i to się nie udaje. Dodaje także teoretyczne rozwiązanie do znalezienia odpowiedzi, ale nie zamierzam przepisywać funkcji, w której się znajduje, modyfikując wywołanie $ db-> fetch ().

Jakieś pomysły?

questionAnswers(2)

yourAnswerToTheQuestion