Domanda

Sto lavorando su un modulo MCQ e ho bisogno di prendere domande casuali dalla mia base di dati. Il problema è che mi sembra di ottenere i duplicati.

È stato utile?

Soluzione

Se li stai recupero dal database, utilizzare SQL per fare il vostro lavoro. per esempio. il recupero di 20 domande casuali (senza ripetere):

SELECT * FROM questions ORDER BY RAND() LIMIT 20

Altri suggerimenti

Sembra che si desidera a mescolare le domande, non casuale l'accesso ad essi. Così il vostro algoritmo dovrebbe essere qualcosa di simile.

  1. Prendi il tutto domanda (o le chiavi di domanda) che si desidera visualizzare.
  2. li Mischia
  3. Recupera / display in loro nell'ordine mischiato

per mischiare check out: Fisher-Yates Shuffle algoritmo

Se stai usando MySql e si dispone di piccola quantità ragionevole di dati, è possibile utilizzare ORDER BY RAND ()

Do apolidi generatori di numeri casuali esistere?

Ogni sequenza di numeri pseudo-casuali alla fine ripetere. Come si ottiene i numeri pseudo-casuali?

Senza più informazioni che posso suggerire una soluzione rudimentale. (Ma si prega di aggiornare la tua domanda con più informazioni)

Sto indovinando si dispone di utenti, perché allora si potrebbe risparmiare in una tabella (sia esso temporaneo o no), quali domande detto utente ha già ottenuto.

Se non si dispone di utenti, è possibile utilizzare il SESSION_ID come un identificativo utente per l'utente.

Quindi, quando si recupera una domanda per la prima volta, e l'utente risponde che, salva le informazioni necessarie per salvare, e quindi l'ID dell'utente e l'ID del problema in una tabella.

Quando il recupero della domanda successiva, si fa un controllo per verificare se l'utente ha a questa domanda id in questa nuova tabella.

Se si dispone di un gran numero di righe è possibile aggiungere una colonna alla tabella che memorizza un numero compreso tra 0 e 1 e poi recuperare con una query:

SELECT * FROM `mytable` WHERE `randcolumn` > RAND() LIMIT 20

Questo significa che il database non deve ordinare in modo casuale l'intera tabella di fornire solo 20 righe.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top