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?