2015-06-10 30 views
1

我有兩個表tableatableb像下面;有效的方式來計算第二表的外鍵的數量和與第一表中的行顯示出來 - PHP - MySQL的

表A

+--------+-------+-------+-------+------+ 
| fa | fb | fc | fd | fe | 
+--------+-------+-------+-------+------+ 
| col1 | f11 | f12 | f13 | x1 | 
+--------+-------+-------+-------+------+ 
| col2 | f21 | f22 | f23 | x2 | 
+--------+-------+-------+-------+------+ 
| col3 | f31 | f32 | f33 | x3 | 
+--------+-------+-------+-------+------+ 
| col4 | f41 | f42 | f43 | x4 | 
+--------+-------+-------+-------+------+ 

表B

+--------+-------+-------+-------+------+ 
| tbba | tbbb | tbbc | tbbd | tbbe | 
+--------+-------+-------+-------+------+ 
| cola | fa1 | fa2 | fa3 | x1 | 
+--------+-------+-------+-------+------+ 
| colb | fb1 | fb2 | fb3 | x1 | 
+--------+-------+-------+-------+------+ 
| colc | fc1 | fc2 | fc3 | x1 | 
+--------+-------+-------+-------+------+ 
| cold | fd1 | fd2 | fd3 | x2 | 
+--------+-------+-------+-------+------+ 
| cole | fe1 | fe2 | fe3 | x2 | 
+--------+-------+-------+-------+------+ 
| colf | ff1 | ff2 | ff3 | x3 | 
+--------+-------+-------+-------+------+ 
| colg | fg1 | fg2 | fg3 | x3 | 
+--------+-------+-------+-------+------+ 
| colh | fh1 | fh2 | fh3 | x3 | 
+--------+-------+-------+-------+------+ 
| coli | fi1 | fi2 | fi3 | x3 | 
+--------+-------+-------+-------+------+ 
| colj | fj1 | fj2 | fj3 | x4 | 
+--------+-------+-------+-------+------+ 

我想生成一個表等;

+--------+-------+-----+ 
| col1 | f11 | 3 | 
+--------+-------+-----+ 
| col2 | f21 | 2 | 
+--------+-------+-----+ 
| col3 | f31 | 4 | 
+--------+-------+-----+ 
| col4 | f41 | 1 | 
+--------+-------+-----+ 

的數字表示其中的tablea條目fe字段出現在tableb的時間。目前,我從tablea獲取所有的行,並在每個循環中,我用另一個查詢來獲得tableb的行數,使用tableafe場。因此,我有1個主查詢和4個子查詢。有什麼有效的方式,如加入或什麼?

謝謝

+0

你能僅僅通過FA,FB連接兩個表上FE = TBBE和組嗎? – Tim3880

回答

0

試試這個:

SELECT a.fa , a.fb , COUNT(b.tbbe) 
FROM tablea a 
LEFT JOIN tableb b ON a.fe = b.tbbe 
GROUP BY a.fa 
+0

爲什麼我們使用'GROUP BY a.fa'? –

+0

否則你只會得到一行。這是每a.fa計數。 –

相關問題