Sélection dans une base de donnée
Résolu
David987
Messages postés
145
Statut
Membre
-
David987 Messages postés 145 Statut Membre -
David987 Messages postés 145 Statut Membre -
Bonjour,
J'aimerai votre aide afin de m'aider à réaliser une sélection dans ma bdd en fonction de certains paramètres.
Je vais nommer 5 Objets : A, B, C, D et E.
- Je souhaiterai que ces 5 Objets soit entrés en bdd (je sais faire, aucun souci).
- Je souhaiterai qu'une fonction php sélectionne, disons, 30 Objets en tous en prenant en compte ce quota : 50% de A, 20% de B, 15% de C, 10% de D et 5% de E.
- Insérer le résultat de sélection des 30 Objets dans une autre table (je sais faire avec une boucle while).
pouvez-vous m'aiguiller sur la marche à suivre s'ils vous plait ?
Merci par avance.
J'aimerai votre aide afin de m'aider à réaliser une sélection dans ma bdd en fonction de certains paramètres.
Je vais nommer 5 Objets : A, B, C, D et E.
- Je souhaiterai que ces 5 Objets soit entrés en bdd (je sais faire, aucun souci).
- Je souhaiterai qu'une fonction php sélectionne, disons, 30 Objets en tous en prenant en compte ce quota : 50% de A, 20% de B, 15% de C, 10% de D et 5% de E.
- Insérer le résultat de sélection des 30 Objets dans une autre table (je sais faire avec une boucle while).
pouvez-vous m'aiguiller sur la marche à suivre s'ils vous plait ?
Merci par avance.
6 réponses
-
yg_be Messages postés 23437 Date d'inscription Statut Contributeur Dernière intervention Ambassadeur 1 588
bonjour,
as-tu essayé la solution décrite ici: https://forums.commentcamarche.net/forum/affich-35722340-taux-en-php -
Oui mais ce n'est pas bon.
et j'ai perdu mon fichier.
En faite je souhaite que le tirage se fasse en fonction du taux de chaque objet. -
J'ai ça pour le moment :
//Enregistrement de 30 pokemon dans une table pour affichage au joueur $nbr_poke = 0 ; while( $nbr_poke < 30) { $poke_affich_joueur = $bdd->query("SELECT * FROM selec_poke ORDER BY RAND()LIMIT 30"); $poke_entrer = $poke_affich_joueur->fetch(); $randChromatique = rand(1,50); $niveau = rand(13,17); $sexe = rand(1,2); if ($sexe == 1) { $sexe2 = 'Male'; }elseif ($sexe == 2) { $sexe2 = 'Femelle'; } else { $sexe = 'Inconnu'; } if($randChromatique == 1) { $Chromatique = "chromatique"; } else { $Chromatique = ""; } $insert_poke_capture = $bdd->exec("INSERT INTO herbe (`no_poke`, `nom`, `lvl`, `sexe`, `chroma`) VALUES('".$poke_entrer['no_poke']."', '".$poke_entrer['nom']."', '".$niveau."', '".$sexe2."', '".$Chromatique."')"); $nbr_poke++; } header('location:test_affiche.php');
Comment adapter ce code pour sélectionner en fonction du taux que je souhaite ? -
Alors voila, en suivant tes conseils je suis parvenu à faire ça :
//Enregistrement de 30 pokemon dans une table pour affichage au joueur $nbr_poke = 0 ; while( $nbr_poke < 30) { $taux_poke = rand(1,100); if ($taux_poke <= 50) { $poke_affich_joueur = $bdd->query('SELECT * FROM selec_poke WHERE taux = "1"'); $poke_entrer = $poke_affich_joueur->fetch(); $randChromatique = rand(1,15); $niveau = rand(12,18); $sexe = rand(1,2); if ($sexe == 1) { $sexe2 = 'Male'; }elseif ($sexe == 2) { $sexe2 = 'Femelle'; } else { $sexe = 'Inconnu'; } if($randChromatique == 1) { $Chromatique = "chromatique"; } else { $Chromatique = ""; } } elseif (($taux_poke >= 51) && ($taux_poke <=70)) { $poke_affich_joueur = $bdd->query('SELECT * FROM selec_poke WHERE taux = "2"'); $poke_entrer = $poke_affich_joueur->fetch(); $randChromatique = rand(1,15); $niveau = rand(9,14); $sexe = rand(1,2); if ($sexe == 1) { $sexe2 = 'Male'; }elseif ($sexe == 2) { $sexe2 = 'Femelle'; } else { $sexe = 'Inconnu'; } if($randChromatique == 1) { $Chromatique = "chromatique"; } else { $Chromatique = ""; } } elseif (($taux_poke >= 71) && ($taux_poke <=85)) { $poke_affich_joueur = $bdd->query('SELECT * FROM selec_poke WHERE taux = "3"'); $poke_entrer = $poke_affich_joueur->fetch(); $randChromatique = rand(1,15); $niveau = rand(5,11); $sexe = rand(1,2); if ($sexe == 1) { $sexe2 = 'Male'; }elseif ($sexe == 2) { $sexe2 = 'Femelle'; } else { $sexe = 'Inconnu'; } if($randChromatique == 1) { $Chromatique = "chromatique"; } else { $Chromatique = ""; } } elseif (($taux_poke >= 86) && ($taux_poke <=95)) { $poke_affich_joueur = $bdd->query('SELECT * FROM selec_poke WHERE taux = "4"'); $poke_entrer = $poke_affich_joueur->fetch(); $randChromatique = rand(1,15); $niveau = rand(3,8); $sexe = rand(1,2); if ($sexe == 1) { $sexe2 = 'Male'; }elseif ($sexe == 2) { $sexe2 = 'Femelle'; } else { $sexe = 'Inconnu'; } if($randChromatique == 1) { $Chromatique = "chromatique"; } else { $Chromatique = ""; } } else { $poke_affich_joueur = $bdd->query('SELECT * FROM selec_poke WHERE taux = "5"'); $poke_entrer = $poke_affich_joueur->fetch(); $randChromatique = rand(1,15); $niveau = rand(1,5); $sexe = rand(1,2); if ($sexe == 1) { $sexe2 = 'Male'; }elseif ($sexe == 2) { $sexe2 = 'Femelle'; } else { $sexe = 'Inconnu'; } if($randChromatique == 1) { $Chromatique = "chromatique"; } else { $Chromatique = ""; } } $insert_poke_capture = $bdd->exec("INSERT INTO herbe (`no_poke`, `nom`, `lvl`, `sexe`, `chroma`) VALUES('".$poke_entrer['no_poke']."', '".$poke_entrer['nom']."', '".$niveau."', '".$sexe2."', '".$Chromatique."')"); $nbr_poke++; } header('location:test_affiche.php');
Cela fonctionne parfaitement avec ce que je cherche par contre j'aimerais savoir si vous pouviez m'aiguillez sur le fait de simplifier ce code ?
Merci par avance. -
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question -
Ah oui je comprend je vais faire ça.
Tu vois autre chose pour améliorer et réduire le code ?
Voici ce que j'ai fais pour le moment :
$select_time_actu = $bdd->query("SELECT * FROM temps_actu WHERE time")->fetch(); $time_derniere_actu = $select_time_actu['time']; if(time() - $time_derniere_actu < 10) {} else { //Enregistrement de 30 pokemon dans une table pour affichage au joueur + update du temps de l'actu $update_time_actu = $bdd-> exec("UPDATE temps_actu SET time = '".time()."'"); $vider_table = $bdd->exec("TRUNCATE herbe"); $map = "Nazaris"; $nbr_poke = 0 ; while( $nbr_poke < 30) { $taux_poke = rand(1,100); $sexe = rand(1,2); if ($sexe == 1) { $sexe2 = 'Male'; }elseif ($sexe == 2) { $sexe2 = 'Femelle'; } else { $sexe = 'Inconnu'; } if($randChromatique == 1) { $Chromatique = "chromatique"; } else { $Chromatique = ""; } $randChromatique = $chance_chroma; if ($taux_poke <= 50) { $poke_affich_joueur = $bdd->query('SELECT * FROM selec_poke WHERE taux = "1" && map="'.$map.'"'); $poke_entrer = $poke_affich_joueur->fetch(); $niveau = rand(12,18); } elseif (($taux_poke >= 51) && ($taux_poke <=70)) { $poke_affich_joueur = $bdd->query('SELECT * FROM selec_poke WHERE taux = "2" AND map="'.$map.'"'); $poke_entrer = $poke_affich_joueur->fetch(); $niveau = rand(9,14); } elseif (($taux_poke >= 71) && ($taux_poke <=85)) { $poke_affich_joueur = $bdd->query('SELECT * FROM selec_poke WHERE taux = "3" AND map="'.$map.'"'); $poke_entrer = $poke_affich_joueur->fetch(); $niveau = rand(5,11); } elseif (($taux_poke >= 86) && ($taux_poke <=95)) { $poke_affich_joueur = $bdd->query('SELECT * FROM selec_poke WHERE taux = "4" AND map="'.$map.'"'); $poke_entrer = $poke_affich_joueur->fetch(); $niveau = rand(3,8); } else { $poke_affich_joueur = $bdd->query('SELECT * FROM selec_poke WHERE taux = "5" AND map="'.$map.'"'); $poke_entrer = $poke_affich_joueur->fetch(); $niveau = rand(1,5); } $insert_poke_capture = $bdd->exec("INSERT INTO herbe (`no_poke`, `nom`, `lvl`, `sexe`, `chroma`, `map`) VALUES('".$poke_entrer['no_poke']."', '".$poke_entrer['nom']."', '".$niveau."', '".$sexe2."', '".$Chromatique."', '".$map."')"); $insert_poke_capture_archive = $bdd->exec("INSERT INTO archive_herbe (`no_poke`, `nom`, `lvl`, `sexe`, `chroma`, `map`) VALUES('".$poke_entrer['no_poke']."', '".$poke_entrer['nom']."', '".$niveau."', '".$sexe2."', '".$Chromatique."', '".$map."')"); $nbr_poke++; } } header('location:test_affiche.php'); -
