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. P>
J'ai jusqu'à présent joué avec la déclaration suivante pour tester: p> Ce retour seulement 3 questions aléatoires de toutes les catégories. P> Et j'ai ensuite regardé par exemple sur ce lien:
MySQL Sélectionnez Random de chacune des catégories P> et essayé ceci: p> mais ici, je dois ajouter chaque catégorie manuellement. p> ma question: strong> 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)? p> Créateur de données factices strong>
Le code de requête TABLA TABLEA TABLEA TABLEMENT appelé
aléatoire CODE> et créé une procédure stockée appelée CREATE_RANDOM CODE> 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: P >
3 Réponses :
Oui, vous pouvez le faire en énumérant les lignes, puis récupérant les trois top trois:
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 B>, 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/... ).
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()
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 code> à 90% = 1 et 10% = 2 (ish)
Laissez-nous Continuez cette discussion en chat .
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)
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.