Pregunta

En MySQL puedo utilizar la función RAND (), hay alguna alternativa en SQLite 3?

¿Fue útil?

Solución

usando aleatorio () :

SELECT foo FROM bar
  WHERE id >= (abs(random()) % (SELECT max(id) FROM bar))
  LIMIT 1;

EDIT (por QOP): Desde los docs en SQLite Autoincrement columnas ED señala que:

  

El algoritmo de selección ROWID normales descritas anteriormente generará   aumentando monótonamente ROWIDs únicas , siempre y cuando no utilice el   ROWID valor máximo y no se elimina la entrada de la tabla con   ROWID más grande. Si alguna vez eliminar filas, luego de ROWIDs   previamente filas eliminadas pueden ser reutilizados cuando se crean nuevas filas .

Lo anterior sólo es cierto si usted no tiene una columna INTEGER PRIMARY KEY AUTOINCREMENT (todavía no tendrán ningún problema con columnas INTEGER PRIMARY KEY). De todos modos, esto debería ser más portátil / fiable:

SELECT foo FROM bar
  WHERE _ROWID_ >= (abs(random()) % (SELECT max(_ROWID_) FROM bar))
LIMIT 1;

ROWID, _ROWID_ y OID son todos los alias para la fila SQLite ID interno.

Otros consejos

SELECT * FROM table ORDER BY RANDOM() LIMIT 1;

Resuelto:

SELECT * FROM table ORDER BY RANDOM() LIMIT 1;

Para un uso mucho mejor rendimiento en esta SQLite:

SELECT * FROM table WHERE id IN (SELECT id FROM table ORDER BY RANDOM() LIMIT x) 

Esto es aplicable a MySQL también. Esto funciona más rápido, porque motores SQL primera carga campos de filas en la memoria proyecta luego ordenarlos , aquí sólo descarga y de clasificación al azar al campo id de filas, entonces obtenemos X de ellos, y encontramos el conjunto de filas de éstos X ids que es de forma predeterminada indexado.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top