Náhodné řazení v různých databázích 0
Pro jednu modifikaci jsem nedávno řešil jeden z dalších problémů implementace jedné funkce v různých databázových systémech. Šlo o klasický ORDER BY RAND() z MySQL.
Kód jsem tvořil pro phpBB, které podporuje následující: MySQL, PgSQL, MSSQL, Oracle, SQLite, Firebird.
<?php switch ($db->sql_layer) { case 'mssql': $random = 'NEWID()'; break; case 'postgres': case 'sqlite': $random = 'RANDOM()'; break; default: $random = 'RAND()'; break; } $sql = 'SELECT something FROM some_table ORDER BY ' . $random; ?>
Oracle mi přichystal trochu nepříjemnou záležitost, nutný sub-select:
SELECT COLUMN FROM ( SELECT COLUMN FROM TABLE ORDER BY dbms_random.VALUE ) WHERE ROWNUM = 1
To jsem ale nezkoumal Firebird. Nejdříve je potřeba definovat vlastní funkci:
DECLARE EXTERNAL FUNCTION rand RETURNS DOUBLE PRECISION BY VALUE ENTRY_POINT 'IB_UDF_rand' MODULE_NAME 'ib_udf';
a poté použít klasický ORDER BY RAND();
