信息

2014-08-27 68 views
0

我有直接放置像這樣這兩個表....信息

表1

+------+----------+-----+--------+ 
| Year | Runner | Age | Result | 
+------+----------+-----+--------+ 
| 2004 | Runner 1 | 3 | Won | 
| 2004 | Runner 2 | 4 | Lost | 
| 2004 | Runner 3 | 3 | Lost | 
| 2005 | Runner 1 | 3 | Lost | 
| 2005 | Runner 2 | 3 | Lost | 
| 2005 | Runner 3 | 4 | Won | 
| 2006 | Runner 1 | 4 | Won | 
| 2006 | Runner 2 | 3 | Lost | 
| 2006 | Runner 3 | 4 | Lost | 
+------+----------+-----+--------+ 

表2

+-------+----------+-----+ 
| RCNum | Runner | Age | 
+-------+----------+-----+ 
|  1 | Runner 1 | 3 | 
|  2 | Runner 2 | 4 | 
|  3 | Runner 3 | 3 | 
|  4 | Runner 4 | 3 | 
|  5 | Runner 5 | 3 | 
+-------+----------+-----+ 

現在我將使用...

$numbers = mysql_query("SELECT age, 
     sum(case when result <> ''then 1 else 0 end) Sec1Picks, 
     sum(case when result = 'Won' then 1 else 0 end) Sec1Wins 
    FROM table1 
    GROUP BY age 
    ORDER BY age ASC"); 

while($row = mysql_fetch_array($numbers, MYSQL_ASSOC)) { 
echo "(".$row['Age']."yo) ".$row['Sec1Wins']."-".$row['Sec1Picks']; } 

這會給我年齡,然後選擇和獲勝者的數量,但我想要做的是在這之後,我想包括那些在這個因素下的RCNum。

因此,例如,將輕鬆的心情輸出..

(輕鬆的心情)1-5(1 3 4 5)
(4yo)2-4(2)

我的技能是基本所以我不知道如何去實現這一點,所以任何幫助將不勝感激!謝謝你提前!

編輯

我目前使用的...的建議如下

SELECT t1.age 
    , SUM(CASE WHEN t1.result <> '' THEN 1 ELSE 0 END) Sec1Picks 
    , SUM(CASE WHEN t1.result = 'Won' THEN 1 ELSE 0 END) Sec1Wins 
    , GROUP_CONCAT(DISTINCT t2.rcnum ORDER BY rcnum SEPARATOR ' ') rcnums 
    FROM table2 t2 
    RIGHT 
    JOIN table1 t1 
    ON t1.age= t2.age 
GROUP 
    BY t1.age; 

這給了我這個...

+-----------+-----------+----------+---------------------------+ 
| age  | Sec1Picks | Sec1Wins |   rcnums   | 
+-----------+-----------+----------+---------------------------+ 
|   3 |  420 |  14 | 8 9 13 21 22 25 27  | 
|   4 |  352 |  24 | 6 7 11 16 17 19 20 29  | 
|   5 |  470 |  10 | 1 2 3 5 10 15 18 23 24 26 | 
|   6 |  64 |  6 | 12 14      | 
|   7 |  25 |  1 | 4       | 
|   8 |   7 |  0 | NULL      | 
|   9 |   2 |  0 | 28 30      | 
+-----------+-----------+----------+---------------------------+ 

但正在發生的事情是每個號碼插入到rcnums列中,它將再次在Picks/Wins列中添加統計信息!

在Picks/Wins列中,我只想在Table1中計數,所以3yo將是60和2而不是420和14.我將如何更改編碼以實現此目的?

+0

我很抱歉,但這些表在不同的數據庫?標題是這樣說的,但在你的問題中沒有明確說明。對於不同的數據庫,我假設不同的數據庫實例 – Leo 2014-08-27 16:01:28

+0

@Leo我認爲OP的意思是'表' – Strawberry 2014-08-27 16:30:52

+0

是的,抱歉,我的意思是,兩個表合爲一體。 – user3581707 2014-08-28 21:36:21

回答

1
SELECT t2.age 
    , SUM(CASE WHEN t1.result <> '' THEN 1 ELSE 0 END) Sec1Picks 
    , SUM(CASE WHEN t1.result = 'Won' THEN 1 ELSE 0 END) Sec1Wins 
    , GROUP_CONCAT(DISTINCT t2.rcnum ORDER BY rcnum SEPARATOR ' ') rcnums 
    FROM table2 t2 
    LEFT 
    JOIN table1 t1 
    ON t1.runner = t2.runner 
GROUP 
    BY t2.age; 
+0

作品一種享受,謝謝 – user3581707 2014-08-27 17:51:11

+0

我注意到一些現在不太適合的東西! 說我正在查看3yo亞軍的統計數字是1-5 .. 這對每個RCNum都是重複的,所以如果rcnum列中有4個,這個數字會變成4-20,而我希望它保持爲1-5,無論如何解決這個問題? – user3581707 2014-08-28 11:26:02