2012-10-16 44 views
3

我創建了一個比賽,其中推薦其他人的比賽增加了他們與每個推薦的勝利機率。現在我必須弄清楚如何使用mysql或php來給他們帶來更好的賠率。選擇一個隨機行不會削減它。選擇使用兩列的隨機條目

在我的表格中,我有兩列,分別是ID和推薦ID。該表跟蹤誰通過添加標識加入轉診ID字段簡稱爲之,所以數據的前幾行看起來是這樣的:

name id referralid 
mark 15 20 
ted 20 
jim 22 20 

所以,「泰德」應該有3箇中獎機會,因爲他參照的2個其他人。我如何在MySQL或PHP中執行此操作?

+0

對不起,如果我不清楚,我需要一個mysql命令從db中獲取一個條目,這實際上會給ted帶來更好的賠率。 – GraphicsGuy

回答

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

你可以用'1'代替'referralid =''然後1 else 1 end'的情況。你可以用referralid ='''替換'referralid =''然後1 else 0 end'的情況。你可能是指「SUM」而不是「COUNT」。 – AndreKR

+0

謝謝。編輯查詢 – AnandPhadke

+0

哦,這是'COUNT(*)'你的意思,好的。 :) – AndreKR

0

試試這個::

你爲什麼不得到一個隨機數,並獲得該行該號碼,然後到該行的referralid分將贏得ID。

說這個給定的數據,如果生成1或3,說這個隨機數。 你會有兩個行中指出。

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

假設你的表稱爲這將選擇隨機使用臭名昭著的ORDER BY RAND()建設

mark 
ted 
ted 
jim 

排序(慢,但你沒有問最大性能),然後從該列表中選擇一個結果。

+0

東西不工作....我的查詢只返回列名稱'名稱'。這裏相當新穎。 SELECT '名稱' FROM寄存器 LEFT JOIN寄存器referred_register ON referred_register.referral = register.id ORDER BY RAND() LIMIT 1 – GraphicsGuy

+0

我改變的 「姓名」,以*和它被拉動的信息的整個行,但有列出某些原因的重複列。 – GraphicsGuy

+0

經過編輯以更好地滿足您的需求。 – AndreKR