Choix aléatoire dans ma bdd
Résolu
Lucryio
Messages postés
224
Statut
Membre
-
Lucryio Messages postés 224 Statut Membre -
Lucryio Messages postés 224 Statut Membre -
Bonjour,
Je viens vers vous afin d'obtenir de l'aide, je m’explique :
J'aimerais faire une sélection de 10 entrées dans ma table mais que ces 10 entrées soit différente.
Par exemple, j'ai 100 entrées "A" 100 entrées "B" 100 entrées "C"
J'aimerais en sélectionner 10 parmi les 300 entrées.
Ma requête :
Fonctionne SAUF qu'elle me sélectionné 10 entrées soit de A, B ou C, hors moi j'aimerais, par exemple, qu'elle me choisisse 3 "A", 4 "B" et 3 "C".
Comment je pourrais faire pour que la sélection se fasse comme je le souhaiterais ?
Merci par avance pour votre aide.
Je viens vers vous afin d'obtenir de l'aide, je m’explique :
J'aimerais faire une sélection de 10 entrées dans ma table mais que ces 10 entrées soit différente.
Par exemple, j'ai 100 entrées "A" 100 entrées "B" 100 entrées "C"
J'aimerais en sélectionner 10 parmi les 300 entrées.
Ma requête :
$sql45 = $bdd->query("SELECT * FROM herbe_normal WHERE map='Route001' AND periode='jour' RAND()");
Fonctionne SAUF qu'elle me sélectionné 10 entrées soit de A, B ou C, hors moi j'aimerais, par exemple, qu'elle me choisisse 3 "A", 4 "B" et 3 "C".
Comment je pourrais faire pour que la sélection se fasse comme je le souhaiterais ?
Merci par avance pour votre aide.
1 réponse
-
Bonjour,
Visiblement ta requête ne contient pas une instruction ORDER BY....
Sachant que pour tester tes requêtes .... tu dois le faire directement dans ta BDD (via phpmyadmin par exemple) et non via ton code php.
ça te permet de te rendre compte plus facilement du résultat et des éventuelles erreurs...
Donc essaye :SELECT * FROM herbe_normal WHERE map='Route001' AND periode='jour' ORDER BY RAND() LIMIT 10
Tu peux aussi le faire en utilisant des jointures..
https://www.mysqltutorial.org/mysql-tips/select-random-records-in-database-table/
.
Cordialement,
Jordane-
-
-
Le souci c'est que ça fait au moins 50 tests que je fais et j'ai toujours 10 entrées de la même catégorie.
les jointures, pas besoin puisque toutes les infos sont dans la même table.
les données de ma table :
-ID(ai, primary)
-no
-nom
-type
-type2
-map
-periode
L'ID correspond à l'auto-incrrément
le no correspond au numèro du pokemon (pour afficher son image)
Donc, moi, je souhaiterais que ma requête selectionne 20 pokemon de cette table mais ci-possible qu'ils soient pas tous identiques.
Tu as une idée ? -
-
Je viens en effet de tester avec le LIMIT après le RAND(), dans phpmyadmin ça m'affiche bien 20 résultats non identique donc nickel.
Souci, les 20 résultats je les enregistres dans une table mais là, il me prend qu'un seul resultat et m'enregistre donc 20 fois le même poke et non les 20 entrées séléctionné.
Voici mon for pour enregistrer les 20 entrées ://requete pour la selection des 20 entrées : $sql45 = $bdd->query("SELECT * FROM herbe_normal2 WHERE map='Route001' AND periode='nuit' ORDER BY RAND() LIMIT 20"); //le for qui enregistre les 20 entrées selectionne ci-dessus : $don = $sql45->fetch(); for($don; $nombre_poke <=20; $nombre_poke++) { $sexe = rand(1,2); if ($sexe == 1) { $sexe2 = 'Male'; }elseif ($sexe == 2) { $sexe2 = 'Femelle'; } else { $sexe = ''; } if($map == "Route001") { $niveau = rand(1,5); } $select_charme_chroma = $bdd->query("SELECT COUNT(*) FROM membres_objets WHERE membre_id='".$ID."' AND ID_objet='1176'")->fetchcolumn(); if ($select_charme_chroma == 1) { $randChromatique = rand(1,8192); } else { $randChromatique = rand(1,16384); } if($randChromatique == 1) { $Chromatique = "Chromatique"; } else { $Chromatique = ""; } $insert_poke_capture = $bdd->exec("INSERT INTO capture VALUES('','".$don['no']."','".$don['nom']."','".$Chromatique."','".$niveau."','".$sexe."','".$don['type']."','".$don['type2']."', '".$don['map']."','0','".time()."')"); }
Pour info, toutes les données ne sont pas Identique SAUF le no et le nom qui sont identique.
une idée pour remédier à ce souci ?
-