2011-02-28 97 views
0

我有與PHP和MySQL的一些querys問題總結: 我有共同的一個場2個不同的表:Mysql的計數和來自兩個不同的表

表1

ID |點擊| num_g |貓| usr_id | active

1 | 10 | 11 | 1 | 53 | 1

2 | 13 | 16 | 3 | 53 | 1

1 | 10 | 22 | 1 | 22 | 1

1 | 10 | 21 | 3 | 22 | 1

1 | 2 | 6 | 2 | 11 | 1

1 | 11 | 1 | 1 | 11 | 1

表2

ID | usr_id |分

1 | 53 | 300


現在我用這個語句只是全部從表1中的每個ID數+ 1太

SELECT usr_id, COUNT(id) + SUM(num_g + hits) AS tot_h FROM table1 WHERE usr_id!='0' GROUP BY usr_id ASC LIMIT 0 , 15 

總結和我得到的總對每個usr_id

usr_id | tot_h |

53 | 50

22 | 63

11 | 20

直到這裏一切正常,現在我有加分(表2) 我嘗試這第二個表:

SELECT usr_id, COUNT(id) + SUM(num_g + hits) + (SELECT points FROM table2 WHERE usr_id != '0') AS tot_h FROM table1 WHERE usr_id != '0' GROUP BY usr_id ASC LIMIT 0 , 15 

但似乎總結了300多分給所有用戶:

usr_id | tot_h |

53 | 350

22 | 363

11 | 320

現在我怎麼能得到像第一次嘗試的總數,但在一個聲明+ secon表?因爲現在我在第二張表中只有一個條目,但我可以在那裏。 感謝您的所有幫助。


喜托馬斯感謝您的回覆,我想這是在正確的方向,但我越來越weirds結果,如

usr_id | tot_h

22 | NULL < ==我認爲null它是因爲usr_id在表2中沒有值

53 | 1033

它就像第二個用戶正在獲取所有的值。然後我試試這個:

 SELECT table1.usr_id, COUNT(table1.id) + SUM(table1.num_g + table1.hits + table2.points) AS tot_h 
FROM table1 
LEFT JOIN table2 ON table2.usr_id = table1.usr_id 
WHERE table1.usr_id != '0' 
AND table2.usr_id = table1.usr_id 
GROUP BY table1.usr_id ASC   

同樣的結果,我只是得到所有值的總和,而不是由每一個用戶,我需要這樣的結果:

usr_id | tot_h

53 | 53 < ====加上表1上的300點

22 | 56個< ====加上表2

/////////結果,我需要////////////

usr_id 100分| tot_h

53 | 353 < ====加上表2上的300點

22 | 156個< ====加上對錶2的100分

我認爲結構必須是這樣的 僞陳述;)

從表1統計所有ID來獲得,其中usr_id然後記錄的數sum hit + num_g並從table2中選擇usr_id與table1相同的額外點並獲得結果:

usr_id | tot_h

53 | 353

22 | 156

回答

3

您的子查詢中沒有任何內容計算將其關聯到外部Table1的額外點。所以,一個解決辦法是增加的相關性:

SELECT usr_id 
    , COUNT(id) + SUM(num_g + hits) 
    + (SELECT points 
     FROM table2 
     WHERE table2.usr_id = table1.usr_id) AS tot_h 
FROM table1 
WHERE usr_id != '0' 
GROUP BY usr_id ASC 
LIMIT 0 , 15 

另一種解決方案是簡單地直接連接到這裏:

SELECT table1.usr_id 
    , COUNT(table1.id) 
     + SUM(table1.num_g + table1.hits + table2.points) 
     AS tot_h 
FROM table1 
    Left Join table2 
     On table2.usr_id = table1.usr_id 
WHERE table1.usr_id != '0' 
GROUP BY table1.usr_id ASC 
LIMIT 0 , 15 
0

我覺得得到解決,我不知道它的最好的,但它爲我工作,如果你知道一種方法來優化這個我真的讚賞它。

SELECT usr_id , COUNT(id) + SUM(num_g + hits)as sumtot , 
     (SELECT points FROM table2 WHERE usr_id = table1.usr_id) AS tot_h 
FROM table1 
WHERE usr_id != '0' 
GROUP BY usr_id ASC 

有了這個,我得到這樣的

usr_id | sumtot | tot_h

5 | 557 | NULL

53 | 2217 | 300

所以然後我只是總結結果並在while循環中顯示它。

<?php 
//some mysql here 
//then the while loop 
// and then the final sum 

$final_result=$r_rank['tot_h']+$r_rank['sumtot']; 

?> 

非常感謝您的幫助托馬斯:)

相關問題