2017-10-20 5 views
0

Je dois faire un quiz pour l'école et je stocke toutes mes questions dans une table MySQL (l'utilisation d'une base de données est une exigence du projet.) Y at-il un moyen peut-on randomiser l'ordre des enregistrements d'une table pour que je puisse facilement les insérer dans le programme java quand nécessaire, en commençant par le haut et en redescendant, sans avoir à en choisir un au hasard et risquer ainsi des doublons?Comment puis-je randomiser l'ordre d'une table MySQL

+0

Il est plus simple de simplement mélanger le tableau lorsque vous obtenez le résultat. Qu'est-ce qui est dans le backend? – wast

+0

Oui j'ai pensé cela mais j'ai plus de questions dans la table que de positions dans le tableau. J'ai déjà trié comment randomiser dans quel ordre les questions apparaissent, mais quand je les saisis dans le tableau, il prend toujours juste les premières questions du haut de la table. – Darragh

+0

Testé ORDER BY RAND()? – wast

Répondre

0

Je peux voir plusieurs façons de gérer votre problème, mais vous aurez besoin de plus d'informations sur votre utilisation pour deviner leur viabilité. Le premier qui me vient à l'esprit serait d'écrire la question déjà choisie dans une autre table, avec l'identifiant du client. Ainsi, lorsque vous choisissez la question suivante, vous pouvez simplement exclure ceux qui sont déjà dans l'autre table.

Pour "réorganiser" votre table, le plus simple serait d'ajouter simplement une colonne de tri.

Ma table ressemble à ceci:

CREATE TABLE `questions` (
    `questionId` int(11) NOT NULL AUTO_INCREMENT, 
    `question` varchar(1000) NOT NULL, 
    `sort` varchar(36) DEFAULT '', 
    PRIMARY KEY (`questionId`) 
) ENGINE=InnoDB DEFAULT CHARSET=utf8; 

La colonne sort contiendra UUID, donc il sera très probablement pas les collisions. Maintenant

, pour changer l'ordre que je simplement mettre à jour ces UUID avec de nouvelles:

UPDATE questions SET sort = uuid() ORDER BY rand(); 

Pour sélectionner quelques questions, il suffit d'utiliser cette colonne pour commander le résultat.

SELECT questionId, question FROM questions ORDER BY sort; 

Un index sur la colonne sort pourrait être utile lorsque vous avez beaucoup de questions, disent des milliers. Je suppose que ce sera assez rapide sans un.

Au lieu de UUID s vous pouvez également utiliser des données moins volumineuses, il doit juste être quelque chose de relativement aléatoire.