2014-02-17 33 views
0

我有這段可愛的代碼複製出不同的行數,因此我可以創建一個關於每個公民擁有多少人的關聯列表。優化MySQL操作以獲得計數

$citizen_id = 1; 
$goods = array(); 
$goods_result = mysql_query("SELECT id,name FROM goods"); 
while(($goods_row = mysql_fetch_assoc($goods_result))) { 
    $good_id = $goods_row['id']; 
    $query = "SELECT count(*) FROM possessions where citizen_id=$citizen_id and good_id=$good_id"; 
    $possessed_result = mysql_query($query); 
    $possessed_row = mysql_fetch_row($possessed_result); 
    if($possessed_row) { 
     $possessed = $possessed_row[0]; 
     $goods[$goods_row['name']] = $possessed; 
    } 
} 
echo json_encode ($goods); 

它可以工作,但運行速度太慢。在我看來,必須有辦法讓MySQL建立一個計數表並在單個查詢中將其返回給我,但我不知道如何確定如何執行該操作。有關如何使此操作更快的任何想法?

回答

2

如何使用查詢像

SELECT g.id good_id, 
     count(*) cnt_of_goods 
FROM possessions p INNER JOIN 
     goods g ON p.good_id = g.id 
where citizen_id=$citizen_id 
GROUP BY g.id 
+0

真棒。這正是我需要的。 – Luke