改进MySQL查询

时间:2012-09-25 02:29:50

标签: php sql group-by

目前在我的电子商务网站中有2个表格如下: 我用2个查询来生成

$query = $this->db->query("SELECT count(*) AS hits, product_id
                           FROM visitors
                           GROUP BY product_id");

if ($query->num_rows() > 0) {
    foreach ($query->result() as $row){
        $hits = $row->hits;
        $product_id = $row->product_id;
        $data = array(
           'product_id' => $product_id ,
           'hits' => $hits
        );
        $this->db->insert('visitor_days', $data);
    }
}   

问题:

如果10k记录,更新速度很慢。如何改进此查询? 我可以在单个查询中制作吗?

访问者

 - ID     product_id   date
 - 534024   69082       2012-09-25
 - 534025   69082       2012-09-25
 - 534026   69082       2012-09-25
 - 534027   69082       2012-09-25
 - 534028   53042       2012-09-25
 - 534029   53042       2012-09-25

visitor_days

 - ID          product_id   hits
 - 534024   69082         4
 - 534025   53042         2

1 个答案:

答案 0 :(得分:4)

您应该可以使用SELECT子句

在一个INSERT INTO语句中执行此操作
INSERT INTO visitor_days
  (product_id, hits)
  SELECT product_id, COUNT(*)
    FROM visitors
    GROUP BY product_id

这在你的10k案例中应该非常快,因为你将做一个查询而不是10,001。