Вопрос

SQLite поддерживает посев RANDOM() функция так же, как mysql делает с RAND()?

$query = "SELECT * FROM table ORDER BY RAND(" . date('Ymd') . ") LIMIT 1;";

От руководства MySQL о RAND(N):

Если указан постоянный целочисленный аргумент N, он используется в качестве значения семян, который создает повторяющуюся последовательность значений столбцов. В следующем примере обратите внимание, что последовательности значений, полученных RAND (3), - это то же самое, где это происходит.

Если нет, есть ли способ архивировать тот же эффект, используя только один запрос?

Это было полезно?

Решение

Если вам нужен псевдослужащий, вы можете сделать что-то подобное (PHP):

$seed = md5(mt_rand());
$prng = ('0.' . str_replace(array('0', 'a', 'b', 'c', 'd', 'e', 'f'), array('7', '3', '1', '5', '9', '8', '4'), $seed )) * 1;
$query = 'SELECT id, name FROM table ORDER BY (substr(id * ' . $prng . ', length(id) + 2)';

Кроме того, вы можете установить $ SEEM в предопределенное значение и всегда получают такие же результаты.

Я узнал этот трюк от моего коллеги http://steamcooker.blogspot.com/

Другие советы

Посмотреть на sqlite3_randomness() Функция:

SQLite содержит высококачественный генератор псевдослучайных чисел (PRNG), используемый для выбора случайных ROWID, при вставке новых записей в таблицу, которая уже использует самую большую возможную ROWID. PRNG также используется для функций SQL SHARDEBLOB () SQL () и Randomblob ().

...

Первый раз, когда эта процедура вызывается (либо внутри, либо приложение) PRNG Семена с использованием случайности, полученные из метода Xrandomness по умолчанию SQLite3_VFS. Отказ На всех последующих вызове псевдо-случайность генерируется внутренне и без пригрева к методу Xrandomness SQLite3_VFS.

Глядя на источник этого xRandomness метод, вы можете увидеть, что он читает из /dev/urandom на Unix. В Windows он просто возвращает возвратные значения некоторых временных функций. Таким образом, кажется, что ваш единственный вариант - начать взлом на исходный код SQLite.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top