Sélection dans une base de donnée

Résolu
David987 Messages postés 120 Date d'inscription   Statut Membre Dernière intervention   -  
David987 Messages postés 120 Date d'inscription   Statut Membre Dernière intervention   -
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.

6 réponses

yg_be Messages postés 23541 Date d'inscription   Statut Contributeur Dernière intervention   Ambassadeur 1 584
 
bonjour,
as-tu essayé la solution décrite ici: https://forums.commentcamarche.net/forum/affich-35722340-taux-en-php
0
David987 Messages postés 120 Date d'inscription   Statut Membre Dernière intervention   1
 
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.
0
yg_be Messages postés 23541 Date d'inscription   Statut Contributeur Dernière intervention   1 584
 
moi je ferais des tirages indépendants pour chaque type d'objet: tirer 15 A, 6 B, ...
0
David987 Messages postés 120 Date d'inscription   Statut Membre Dernière intervention   1
 
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 ?
0
David987 Messages postés 120 Date d'inscription   Statut Membre Dernière intervention   1
 
Je ne peux plus éditer alors je poste ce commentaire :

Voici la table ou je selectionne les pokemon :
0
David987 Messages postés 120 Date d'inscription   Statut Membre Dernière intervention   1
 
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.
0
yg_be Messages postés 23541 Date d'inscription   Statut Contributeur Dernière intervention   1 584
 
la première chose à faire et de sortir du if tout ce qui est identique dans les différents cas.
0
David987 Messages postés 120 Date d'inscription   Statut Membre Dernière intervention   1 > yg_be Messages postés 23541 Date d'inscription   Statut Contributeur Dernière intervention  
 
e suis d'accord avec toi mais par exemple le niveau ou le sexe doit être calculer à chaque tours du while par exemple tous comme la caractéristique chromatique.
0
yg_be Messages postés 23541 Date d'inscription   Statut Contributeur Dernière intervention   1 584 > David987 Messages postés 120 Date d'inscription   Statut Membre Dernière intervention  
 
ce qui ne nécessite pas de l'avoir dans chaque condition du if. tu peux le mettre entre la fin du if et la fin du while.
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
David987 Messages postés 120 Date d'inscription   Statut Membre Dernière intervention   1
 
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');
0
yg_be Messages postés 23541 Date d'inscription   Statut Contributeur Dernière intervention   1 584
 
il serait plus clair d'inverser le test des lignes 3 à 5, pour éviter le else.
l'instruction fetch peut sortir du if.
l'instruction query peux aussi sortir du if, il suffit de mémoriser le taux.
0
David987 Messages postés 120 Date d'inscription   Statut Membre Dernière intervention   1
 
D'accord, merci beaucoup pour ton aide.
0