6
votes

Comment obtenir des enregistrements aléatoires de chaque catégorie de MySQL?

Dans ma base de données MySQL, j'ai une table avec différentes questions dans différentes catégories.

Je voudrais écrire une instruction SQL qui renvoie 3 questions aléatoires de chaque catégorie.

ici est un exemple d'enregistrements de base de données: xxx

Ici est sorti / résultats de 3 aléatoires sélectionnés et mélangés de toutes les questions de chaque catégorie de la liste ci-dessus : xxx

J'ai jusqu'à présent joué avec la déclaration suivante pour tester: xxx

Ce retour seulement 3 questions aléatoires de toutes les catégories.

Et j'ai ensuite regardé par exemple sur ce lien: MySQL Sélectionnez Random de chacune des catégories

et essayé ceci: xxx

mais ici, je dois ajouter chaque catégorie manuellement.

ma question: i Était une merveille s'il est possible d'aller chercher 3 enregistrements / rangs aléatoires de chaque catégorie de toutes catégories (automatiquement)?


EDIT Cela ne fait pas partie de la question mais aide.

Créateur de données factices Le code de requête TABLA TABLEA TABLEA TABLEMENT appelé aléatoire et créé une procédure stockée appelée CREATE_RANDOM et lorsque vous exécutez la procédure stockée, il créera des données factices aléatoires à l'intérieur d'une table aléatoire: XXX

NOTE: J'ai essayé toutes les réponses et toutes les œuvres vont bien. Gordon Linoff et Pjanaway Réponse Sélectionner uniquement au hasard des 3 premières questions ou inférieures 3, j'ai vérifié Gordon Réponse car il a répondu en premier, mais cela ne signifie pas que d'autres réponses ne sont pas bonnes, toutes sont bonnes et que celles-ci sont bonnes et à la hauteur des utilisateurs de choisir la bonne réponse ou combinaison de réponses. J'aime toutes les réponses et les voter. Drew Pierce Répondez à cette question, il est plus intéressant en ce moment et presque près de l'objectif. Merci à tous.


4 commentaires

Vraiment cool serait si les mots des questions étaient également aléatoires. Mais sérieusement, on dirait que vous êtes 90% là-bas. Est-ce que vous voulez que l'ordre de présentation soit mélangé un peu (c'est-à-dire une catégorie suivie de l'autre)? Ou est-ce que c'est la dernière partie que j'ai enfin lu trois fois: que vous voulez que tout ajout automatique ajout manuel d'une nouvelle union pour chaque nouvelle catégorie? Probablement ce dernier, désolé.


@ DrewPierce, oui, l'idée de l'idée SQL devrait remédier aux questions de la même catégorie afin que les gens répondent à la question ou à la question de savoir ne pas s'attendre à avoir la même question de tous les temps. L'exemple est petit, mais il y aura beaucoup de questions de chaque catégorie, imaginez simplement si j'ai ajouté une nouvelle catégorie chaque semaine, puis je dois modifier mon énoncé SQL constamment, mais si je le fais automatiquement automatiquement, alors ce sera rendre ma journée plus facile;) lol


Nous espérons que cette question vous rapporte des points bien mérités car il semble être très utile dans de nombreux contextes!


Cela me rend heureux si quelqu'un en bénéficie, car j'ai commencé avec cela, cela sonnait une tâche très facile à atteindre mais plus vite se tourna vers une question compliquée à résoudre (pour moi peut-être) et je suis heureux et reconnaissant pour les gens de cette communauté bien Pour aider et contribuer, sur le compte de votre temps. respecter.


3 Réponses :


5
votes

Oui, vous pouvez le faire en énumérant les lignes, puis récupérant les trois top trois: xxx


3 commentaires

Salutations Gordon. J'ai des problèmes avec les résultats. Probablement mieux pour lire la pastie sous la réponse de PJ ci-dessous Première , puis celle-ci avec votre requête interne. Pastie.org/10300277


Il y a un petit défi ici. Maintenant, j'ai construit une plus grande base de données aléatoire pour les tests et lorsque j'exécute votre code et PJANAWAY, sélectionnez trois question et continuez à les mélanger, mais quand j'exécute le code à nouveau, cela conserve les mêmes questions, l'idée était que j'ai plus que trois Des questions dans chaque catégorie, il devrait en prendre 3 et choisissez au hasard de toutes les questions et de les mélanger. Dans votre code, cela ne prend que les trois premières questions et @pjanaway Cela prend les trois dernières questions?


@maytham. . . Si le code renvoie les trois mêmes questions, une possibilité est que la graine au générateur de nombres aléatoires est en cours de réinitialisation. Vous pouvez essayer de la définir manuellement pour voir si vous obtenez des résultats différents ( dev.mysql.com/doc/refman/5.6/fr/... ).



5
votes

En plus de l'autre réponse, c'est aussi une autre façon de le faire.

SELECT r.* FROM random r
WHERE (
  SELECT COUNT(*) FROM random r1
  WHERE r.category = r1.category AND r.id < r1.id
) <= 2
ORDER BY r.category ASC, RAND()


6 commentaires

Je ne peux pas obtenir Gordon de travailler mais je peux obtenir cela pour travailler. montrera une pâtie


@ ArewPierce Ce code fonctionne plus compact, nous avons mis à jour Gordon Réponse Avez-vous essayé la dernière mise à jour?


oui je l'ai essayé 3 fois je sais qu'il a été mis à jour mais je vais essayer à nouveau


OK, les résultats de Pjanaway sont donc revenus comme prévu, 17 catégories, 3 chacun, 51 rangées


Gordon est revenue avec les 300 lignes (même après plusieurs tests d'édition) en raison d'un problème avec la requête interne 4ème colonne seqnum à 90% = 1 et 10% = 2 (ish)


Laissez-nous Continuez cette discussion en chat .



1
votes
select r.* 
FROM questions_for_user r 
WHERE 
( SELECT COUNT(*) FROM random r1 WHERE r.category = r1.category AND r.id < r1.id ) <= 2 
ORDER by randomOrder;

+------------+-----+------------+----------+-------------+
| physcOrder | id  | question   | category | randomOrder |
+------------+-----+------------+----------+-------------+
|         64 | 279 | VQN6TVSS ? |        7 |    33942495 |
|        284 | 226 | BQTD6A44 ? |        9 |    45678738 |
|        290 | 277 | DXE1W0GG ? |        7 |   100007602 |
|        291 | 265 | A99UU1YY ? |        8 |   107468716 |
|         56 | 235 | MBPPXJ44 ? |       14 |   109832248 |
|        112 | 286 | ORK15577 ? |        1 |   193281314 |
|         37 | 293 | GFWQ0BEE ? |        2 |   222852606 |
|        232 | 234 | DWZULKBB ? |        5 |   296692881 |
|         32 | 240 | W771N588 ? |       12 |   303493686 |
|        295 | 273 | CC5FGKFF ? |        5 |   337915901 |
|        178 | 290 | O8B4WRCC ? |       11 |   341509950 |
|        149 | 287 | X5ZR3LHH ? |       15 |   364819476 |
|        202 | 297 | H00HLNRR ? |       17 |   374047531 |
|        207 | 242 | EZ1ET3ZZ ? |       14 |   418951740 |
|        193 | 258 | IHK46577 ? |       10 |   460111512 |
|        214 | 298 | QEHHSAEE ? |       10 |   482322673 |
|        176 | 266 | JNQH26DD ? |        1 |   530153269 |
|        212 | 283 | WBQ0DGLL ? |       13 |   595739692 |
|        257 | 271 | TNG23R11 ? |        6 |   619359840 |
|        190 | 278 | MBW03OUU ? |       16 |   641720378 |
|        140 | 252 | Y7V58ZEE ? |        5 |   644987638 |
|         88 | 251 | PT8E2CII ? |       15 |   673475236 |
|        239 | 285 | E3KDJ144 ? |        2 |   679635152 |
|        159 | 300 | 97V6UXYY ? |       13 |   688431139 |
|        179 | 291 | YNT0YN11 ? |        9 |   700305900 |
|        283 | 246 | FTEEVJ00 ? |       12 |   710591266 |
|         31 | 272 | 3YY2EMM ?  |       11 |   726662739 |
|          7 | 263 | SHEVXPBB ? |       10 |   766681927 |
|         28 | 295 | Y85VNBWW ? |        4 |   806083444 |
|         30 | 289 | FUODJHJJ ? |        4 |   814854070 |
|        262 | 275 | U5BFCUFF ? |        2 |   846163956 |
|         27 | 294 | PTEMZ7GG ? |        6 |   869855570 |
|        296 | 267 | T2HPRW88 ? |        1 |   891041924 |
|        177 | 244 | X1JYHUBB ? |       12 |   916685336 |
|        173 | 274 | LQTFS7RR ? |        7 |   946909650 |
|        243 | 204 | O7VUW2NN ? |       17 |   951026810 |
|         52 | 292 | 71JZTMQQ ? |       13 |  1039681379 |
|         49 | 284 | 5PDRR5YY ? |        8 |  1068298164 |
|        228 | 282 | NWZSPCZZ ? |        8 |  1115906220 |
|         34 | 280 | 441X1YTT ? |        4 |  1119188021 |
|          6 | 281 | EIHVH3ZZ ? |       14 |  1182157711 |
|        123 | 253 | 8L35PFYY ? |       15 |  1204512525 |
|         95 | 288 | 6GGOI2CC ? |        3 |  1244253481 |
|        160 | 299 | ZT8QRRMM ? |       16 |  1289470813 |
|        300 | 229 | 3XEZG0PP ? |       17 |  1319302198 |
|         81 | 231 | LQMYMV44 ? |        3 |  1380298624 |
|        297 | 250 | GEH9PVBB ? |       11 |  1386568968 |
|        218 | 276 | 3J1KGJZZ ? |        6 |  1390090875 |
|        164 | 233 | 3IHU1YKK ? |        9 |  1416089612 |
|         59 | 296 | 8MJCWR55 ? |        3 |  1420850554 |
|         75 | 268 | 2G4G42WW ? |       16 |  1427431541 |
+------------+-----+------------+----------+-------------+
51 rows in set (0.01 sec)

0 commentaires