Zend_Db_Select Reihenfolge nach dem Zufallsprinzip, kompatibel in mssql / mysql

Okay, hier ist die Situation, ich habe eine Anwendung in Zend_Framework geschrieben, die sowohl mit MySQL als auch mit MSSQL als Backend kompatibel ist. Jetzt ist ZF ziemlich gut darin, viele der SQL-Diskrepanzen / Unterschiede zwischen den beiden Sprachen zu lösen, aber ich muss diese noch herausfinden.

Das Ziel ist es, 1 zufälligen Datensatz aus der Tabelle auszuwählen, was eine äußerst einfache Aussage ist.

Hier ist eine Select-Anweisung zum Beispiel:

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

Dies funktioniert perfekt für die MySQL-Datenbanktabellen, da SQL für MySQL wie folgt lautet:

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

Jetzt verwendet MSSQL dagegen dasnewid () Funktion zum Randomisieren.

Gibt es eine Art von Helfer, den ich in die geben kann?Auftrag() Funktion, um zu erkennen, dass es die richtige Reihenfolge verwenden muss? Ich habe die Dokumentation durchsucht und im zfforums ein paar Tipps gefunden, aber nichts solides.

Eines der Dinge, die ich gefunden habe, war:

ORDER BY RANDOM () funktioniert nicht - ZFForums.com

Sie verwenden die folgenden:

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

Es funktioniert ... aber ich versuche nicht, meine Select-Anweisung durch Tippen und Ersetzen der Zeichenkette zu erstellen. Ich versuche, sie im selben Zend_Db_Select-Objekt zu belassen. Ich habe auch versucht, in der VorbeigehenZend_Db_Expr('RANDOM()') in die->order() auf die Aussage, und es schlägt fehl. Er postet auch eine theoretische Lösung, um die Antwort zu finden, aber ich möchte die Funktion, die sich darin befindet, nicht umschreiben, indem ich den Aufruf $ db-> fetch () ändere.

Irgendwelche Ideen?

Antworten auf die Frage(2)

Ihre Antwort auf die Frage