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

Смежные вопросы