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
Répondre
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.
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
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
Testé ORDER BY RAND()? – wast