php - 改进 MySQL 查询

标签 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

访客天数

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

最佳答案

您应该能够使用 SELECT 子句在一个 INSERT INTO 语句中完成此操作

INSERT INTO visitor_days
  (product_id, hits)
  SELECT product_id, COUNT(*)
    FROM visitors
    GROUP BY product_id

在 10k 的情况下,这应该快得多,因为您将执行一个查询而不是 10,001 个。

关于php - 改进 MySQL 查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12575466/

相关文章:

mysql - 在插入表之前应用正则表达式从 .csv 加载数据

SQL - 加入者和离开者 - 行到列

python - 对列表的列表进行分组,并计算唯一的第一个元素的第二个元素的出现次数

php - 匹配正则表达式中的可选字符串

php - 将 JS 变量传递给 PHP 变量

MySQL 组字段及其值

java - hibernate 插入选项

MYSQL 1 个大左外连接或 3 个左外连接同一个表?

php - 在 PHP 中构建管理界面的最快方法是什么?

php - MySQL 查询太多?