SQLite-ORDENAR POR RAND()
En MySQL puedo usar la función RAND (), ¿hay alguna alternativa en SQLite 3?
4 answers
Usando aleatorio():
SELECT foo FROM bar
WHERE id >= (abs(random()) % (SELECT max(id) FROM bar))
LIMIT 1;
EDIT (by QOP): Desde que los documentos en SQLite Autoincrement ed columnas establece que:
El algoritmo de selección ROWID normal descrito anteriormente generará monótonamente aumentando los ROWIDs únicos siempre y cuando nunca use el valor ROWID máximo y nunca elimina la entrada en la tabla con el ROWID más grande. Si alguna vez elimina filas, entonces ROWIDs de filas eliminadas previamente puede ser reutilizado al crear nuevas filas .
Lo anterior solo es cierto si no tiene una columna INTEGER PRIMARY KEY AUTOINCREMENT
(seguirá funcionando bien con las columnas INTEGER PRIMARY KEY
). De todos modos, esto debería ser más portátil / confiable:
SELECT foo FROM bar
WHERE _ROWID_ >= (abs(random()) % (SELECT max(_ROWID_) FROM bar))
LIMIT 1;
ROWID
, _ROWID_
y OID
son todos los alias para el id de fila interno de SQLite.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2013-05-10 11:26:13
SELECT * FROM table ORDER BY RANDOM() LIMIT 1;
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2012-04-02 16:33:21
Resuelto:
SELECT * FROM table ORDER BY RANDOM() LIMIT 1;
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2009-08-10 07:42:03
Para un rendimiento mucho mejor utilice esto en SQLite:
SELECT * FROM table WHERE id IN (SELECT id FROM table ORDER BY RANDOM() LIMIT x)
Esto también es aplicable a MySQL. Esto se ejecuta más rápido porque Los motores SQL primero cargan los campos proyectados de filas en la memoria y luego los ordenan, aquí solo cargamos y ordenamos aleatoriamente el campo id de las filas, luego obtenemos X de ellas y encontramos las filas completas de estos X id que están indexadas por defecto.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-07-12 15:33:57