2014-02-17 34 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