2012-10-16 4 views
3

J'ai créé un concours où les personnes qui parrainent d'autres personnes augmentent leurs chances de gagner à chaque parrainage. Maintenant, je dois comprendre comment utiliser MySQL ou PHP pour leur donner de meilleures chances. Sélectionner une rangée aléatoire ne la coupe pas.sélectionnez une entrée aléatoire en utilisant deux colonnes

Dans mon tableau, j'ai deux colonnes, une pour l'ID et une pour l'ID de référence. Le tableau conserve la trace de qui a fait référence qui en ajoutant l'ID dans le champ ID de référence, de sorte que les premières lignes de données ressemble à ceci:

name id referralid 
mark 15 20 
ted 20 
jim 22 20 

So « ted » devrait avoir 3 chances de gagner car il a fait référence à deux les autres gens. Comment puis-je faire cela dans mysql ou php?

+0

Désolé, si je n'étais pas clair, j'ai besoin d'une commande mysql pour saisir une entrée de la base de données qui donnera de meilleures chances à ted. – GraphicsGuy

Répondre

0
select a.name,b.Odds 
from (select referralid,count(1) Odds from yourtable 
group by referralid) b inner join yourtable a 
on a.id=b.referralid 
+0

Vous pouvez remplacer 'case quand referralid = '' puis 1 sinon 1 end' avec' 1'. Et vous pouvez remplacer 'cas quand referralid = '' puis 1 sinon 0 end' avec' referralid = '' '. Et vous voulez probablement dire "SUM" au lieu de "COUNT". – AndreKR

+0

thanks.Edited the query – AnandPhadke

+0

Oh, c'était 'COUNT (*)' que vous vouliez dire, ok. :) – AndreKR

0

Essayez cette ::

Pourquoi ne pas vous obtenez un nombre aléatoire et obtenir la ligne pour ce numéro et l'identifiant à laquelle les points referralid de cette ligne gagneront. Dire Avec ces données données, dire le nombre aléatoire si génère 1 ou 3. Vous aurez pointé le point dans les deux rangées.

1
SELECT people.name, people.id 
FROM people 
LEFT JOIN people referred_people ON referred_people.referralid = people.id 
ORDER BY RAND() 
LIMIT 1 

En supposant que votre table est appelée personnes cette option sélectionne

mark 
ted 
ted 
jim 

sortes que l'utilisation de manière aléatoire l'ordre infâme par la construction RAND() (lent, mais vous ne l'avez pas demandé pour des performances maximales) puis choisit un résultat de cette liste.

+0

quelque chose ne fonctionne pas .... ma requête renvoie uniquement le nom de la colonne «nom». tout à fait nouveau ici. SELECT 'name' du registre LEFT JOIN s'inscrire referred_register SUR referred_register.referral = register.id ORDER BY RAND() LIMITE 1 – GraphicsGuy

+0

J'ai changé le "nom" * et il tire toute la ligne de l'information, mais il sont des colonnes en double répertoriées pour une raison quelconque. – GraphicsGuy

+0

Modifié pour mieux répondre à vos besoins. – AndreKR

Questions connexes