2013-08-03 177 views
1

我有兩個表定義遊戲細節:一個表與遊戲和一個移動表。總計子查詢或加入計數

我可以告訴誰是把它是

SELECT (COUNT(idx) %2) FROM history WHERE gameID=x 
的結果= 1

它的白色和結果= 0的黑色。

現在我想選擇一系列特定的遊戲,它是我的舉動。

我不知道我是白人還是黑人。

所以現在我用另一種查詢遊戲:

SELECT g.gameID 
FROM games AS g 
WHERE (g.whitePlayer = 2 or (g.blackPlayer = 2) 

然後我用遊戲ID,看它是否是我的舉動。如果沒有,那麼我跳過那場比賽。

我想這兩個結合起來,我試圖讓一個聚合的子集,但是未成功,因爲COUNT()

例如,這並不工作,並沒有返回值:

SELECT * 
FROM games as g 
WHERE (g.whitePlayer = 2) 
    AND gameID IN (SELECT gameID 
       FROM history as h 
       HAVING (COUNT(h.idx) %2) = 1) 

SELECT COUNT(h.idx) 
FROM history as h 
INNER JOIN 
    (SELECT gameID 
    FROM games 
    WHERE (whitePlayer = 2)) As thesegames ON h.gameID = thesegames.gameID 
HAVING (COUNT(h.idx) %2) = 1 

有沒有人有關於如何解決這個問題的線索?

http://sqlfiddle.com/#!2/425fb

+0

請記住,* AUTO_INCREMENT *只能保證在表中是唯一。他們不能保證順序排列,也不能重複使用。如果您必須處理事務性表的回滾,那麼尤其如此:http://sqlfiddle.com/#!2/2d39c/1。不提及你的數據庫中的併發插入。 –

回答

0

我不是完全結束,但這個回答我的問題

​​
0

試試這個

Select count(h.idx) , COUNT(h.idx) %2 
From history as h 
Inner Join games g 
On h.gameID = g.gameID 
WHERE whitePlayer=2 
HAVING COUNT(h.idx) %2 = 1 
+0

更接近,但第一個計數返回whiteplayer = 2的所有計數項。我需要所有的遊戲。如果你會做SELECT h.gameID等。這隻會返回第一個適當的遊戲。 – davidS

+0

你能提供一個小提琴和你想要的結果嗎? –

+0

需要遊戲中的所有gameID,這是我的舉動。 – davidS