Précédent   Forum des professionnels en informatique > PHP > PHP & SGBD > PHP & MySQL
PHP & MySQL Forum d'entraide sur les fonctions MySQL avec PHP. Avant de poster -> FAQ MySQL, Cours MySQL et Sources MySQL. Pour les questions concernant le moteur MySQL plutôt que les fonctions PHP, merci d'utiliser le forum MySQL.
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
Vieux 24/01/2010, 16h16   #1
Nouveau Membre du Club
 
Inscription : juillet 2008
Messages : 133
Détails du profil
Informations forums :
Inscription : juillet 2008
Messages : 133
Points : 28
Points : 28
Par défaut Tirage au sort selon pourcentage de chance

Bonjour à tous, voici ma question :

Je dispose de la table "cadeaux" qui se présente sous cette forme (champs avec exemple de valeurs sur 4 lignes) :

id_cadeau = 1
nom_cadeau = canard
pourcentage = 25


id_cadeau = 2
nom_cadeau = chat
pourcentage = 25

id_cadeau = 3
nom_cadeau = chien
pourcentage = 50

Ce que je cherche à faire, ensuite, dans une page PHP, c'est d'extraire ces trois lignes de la table et de "tirer au sort" une seule valeur (Peut être par ORDER BY rand() LIMIT 1 ? ) en prenant en compte le pourcentage de chance.

QQn1 peut m'aider ?

Merci d'avance !

C'est à dire que dans mon exemple, j'aurai largement plus souvent de chance de tomber sur le cadeau n°3.
vinze60 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 24/01/2010, 17h27   #2
Modérateur
 
Avatar de sabotage
 
Homme Vincent
Inscription : juillet 2005
Messages : 14 929
Détails du profil
Informations personnelles :
Nom : Homme Vincent

Informations forums :
Inscription : juillet 2005
Messages : 14 929
Points : 16 381
Points : 16 381
Code sql :
SELECT RAND()*pourcentage AS tirage,id_cadeau FROM TABLE ORDER BY tirage DESC LIMIT 1
sabotage est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 24/01/2010, 17h45   #3
Nouveau Membre du Club
 
Inscription : juillet 2008
Messages : 133
Détails du profil
Informations forums :
Inscription : juillet 2008
Messages : 133
Points : 28
Points : 28
Houaaa génial !! Merci ça fonctionne parfaitement
vinze60 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 24/01/2010, 23h14   #4
Nouveau Membre du Club
 
Inscription : juillet 2008
Messages : 133
Détails du profil
Informations forums :
Inscription : juillet 2008
Messages : 133
Points : 28
Points : 28
J'aimerais revenir sur ce sujet SVP pour comprendre un peu

Qqn1 pourrait m'expliquer comment ça fonctionne pour que je puisse réutiliser ce procéder par la suite ?

De plus, est-il possible d'utiliser ce code dans un UPDATE ? Si oui comment ? car si je fais :

Code sql :
1
2
3
 
 
UPDATE table2 SET id_cadeau = (SELECT RAND()*pourcentage AS tirage,id_cadeau FROM table1 ORDER BY tirage DESC LIMIT 1)

Comment faire pour que le SELECT me sorte uniquement id_cadeau ?
vinze60 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 24/01/2010, 23h51   #5
Modérateur
 
Avatar de sabotage
 
Homme Vincent
Inscription : juillet 2005
Messages : 14 929
Détails du profil
Informations personnelles :
Nom : Homme Vincent

Informations forums :
Inscription : juillet 2005
Messages : 14 929
Points : 16 381
Points : 16 381
Code :
UPDATE table2 SET id_cadeau = (SELECT id_cadeau FROM table1 ORDER BY RAND()*pourcentage DESC LIMIT 1)
on multiplie on nombre au hasard par ton pourcentage qui sert de poids.
il y a quand meme une arnaque semantique : le pourcentage n'en est pas un ; il ne fait qu'augmenter la probabilité.
sabotage est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 25/01/2010, 08h53   #6
Nouveau Membre du Club
 
Inscription : juillet 2008
Messages : 133
Détails du profil
Informations forums :
Inscription : juillet 2008
Messages : 133
Points : 28
Points : 28
Je comprend mieux, merci beaucoup ça fonctionne comem je le souhaite !

Du coup si je comprend bien, je n'ai pas à m'arranger pour que les valeurs soient des pourcentages. Je peux utiliser 0.2, 1, ou 10 ou bien encore 2 000. C'est un coefficient.
vinze60 est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +1. Il est actuellement 04h20.


 
 
 
 
Partenaires

Hébergement Web