2017-02-15 40 views
0

這裏是我的表找到一種四中一手牌

pokerHands 
+----------+--------+----+-----+----+----+----+ 
| playerId | gameId | R1 | R2 | R3 | R4 | R5 | 
+----------+--------+----+-----+----+----+----+ 
| 12789 | 17MET | QH | QS | 3D | 3C | 3H | 
| 12789 | 82SAT | 7C | 4S | 4D | 4C | 3H | 
| 56347 | 03DEC | 3S | 6S | 3H | 3C | 3D | 
| 56347 | 23WSA | KH | 10H | 7H | 3H | AH | 
| 84643 | 78GUV | 9H | 7C | 5H | 5C | 2S | 
| 90734 | 65YOB | QH | JH | 8C | 8S | 8D | 
+----------+--------+----+-----+----+----+----+ 

select * from pokerCards limit 5; 
+----------+------+------+------+-----------+-----------+ 
| cardName | face | type | suit | faceValue | gameValue | 
+----------+------+------+------+-----------+-----------+ 
| 10C  | no | 10 | C |  10 |  10 | 
| 10D  | no | 10 | D |  10 |  10 | 
| 10H  | no | 10 | H |  10 |  10 | 
| 10S  | no | 10 | S |  10 |  10 | 
| 2C  | no | 2 | C |   2 |   2 | 
+----------+------+------+------+-----------+-----------+ 

playerId和遊戲ID是第一個表pokerHands複合主鍵,而cardName是第二個表的主鍵。

我試圖找出如何從中將從目前的pokerHands表

​​

不勝感激任何幫助返回此第一表中選擇一個四一種。

+1

考慮修改你的模式。 – Strawberry

+0

你有沒有試過自己? –

+1

提示:不要將10s表示爲'10C',並將其保留爲* always *兩個字母代碼:'TC',其中'T'表示「10」。另一件有用的事情是將手分類並將其放入單個字符串字段中,以便模式顯而易見。 「T?T?T?T?」將會是四十,你可以很容易地將它與正則表達式相匹配。 – tadman

回答

0

試試這個:如果你有你的卡在排名順序插入R1-R5

select playerId, gameId, R1, R2, R3, R4, R5 from pokerHands as ph 
join pokerCards as pc1 on pc1.cardName=ph.R1 
join pokerCards as pc2 on pc2.cardName=ph.R2 
join pokerCards as pc3 on pc3.cardName=ph.R3 
join pokerCards as pc4 on pc4.cardName=ph.R4 
join pokerCards as pc5 on pc5.cardName=ph.R5 
where ((pc1.type=pc2.type) and (pc1.type=pc3.type) and (pc1.type=pc4.type)) 
or ((pc1.type=pc2.type) and (pc1.type=pc3.type) and (pc1.type=pc5.type)) 
or ((pc1.type=pc2.type) and (pc1.type=pc4.type) and (pc1.type=pc5.type)) 
or ((pc1.type=pc3.type) and (pc1.type=pc4.type) and (pc1.type=pc5.type)) 
or ((pc2.type=pc3.type) and (pc2.type=pc4.type) and (pc2.type=pc5.type)) 
+0

這工作的一種享受!按預期返回一行。謝謝你的幫助 ! – eagerzero

+0

是否可以使用計數功能來做到這一點。 計數(訴訟)= 4 – eagerzero

0

你的生活會更容易些。然後你可以檢查兩個案例(卡片左或右)

rank(r1)==rank(r2) and rank(r1)==rank(r3) and rank(r1)==rank(r4) 
OR 
rank(r2)==rank(r3) and rank(r2)==rank(r4) and rank(r2)==rank(r5) 
+0

是的,我完全同意你的看法,但事實並非總是如此。給我一些想法雖然..謝謝你的回覆 – eagerzero

相關問題