跨表格获取mysql中的总销售数据。查询超时

时间:2018-05-01 07:54:54

标签: mysql

获取总销售数据。

我有一个关于在godaddy上托管的mysql的数据库,包含以下表格。

  1. Customer_data - custcode,name等(约450行)
  2. delivery_data - 日期,发票号,数量等(每月约800行)
  3. 我需要在一个月内获得所有客户的总销售数据。 (理想情况下,用户输入的不同月份范围可用于分析趋势)。

    +---------------+--------+--------+--------+--------+--------+--------+
    | Customer Name | Jan-18 | Feb-18 | Mar-18 | Apr-18 | May-18 | Jun-18 |
    +---------------+--------+--------+--------+--------+--------+--------+
    | ABC           |   30   |   50   |   30   |   80   |   70   |  140   |
    +---------------+--------+--------+--------+--------+--------+--------+
    | DEF           |   40   |   50   |   130  |  180   |   70   |  140   |
    +---------------+--------+--------+--------+--------+--------+--------+
    .....
    

    我试过这样做 -

    1. 使用循环json的Php - 查询超时,因为要处理的数据太多
    2. Excel VBA - 在服务器上运行查询需要几个小时,所有其他操作都会停止。
    3. 什么是以更有效的方式获取此数据的最佳方式?

      编辑1 -

      SQL QUERY

      while ($year<2017){
          $months=0;
          while ($months<12){
              $cust_code=mysql_result($result2,$no,"code");
              $sqlquery3="select ifnull(sum(a.quantity),0) as total_quantity
                      from delivery_line a, delivery_main b 
                  where 
                      a.item REGEXP 'INDOX|MEDOX|INDNIT|INDCO2|ARGON'
                      and a.del_no=b.no 
                      and a.series=b.series
                      and b.cust_code='$cust_code'
                      and month(b.date_added)=($months+1)
                      and year(b.date_added) = ($year)";
              $result3=mysql_query($sqlquery3);
              $count3=mysql_num_rows($result3);
              $quantity=mysql_result($result3,0,"total_quantity");
              echo "<td>".$quantity."</td>";
          $months++;
          }
          $year++;
      }
      

1 个答案:

答案 0 :(得分:0)

delivery_data需要有一个引用customer_data的外键,然后你只需

SELECT * from delivery_data a INNER JOIN customer_data b WHERE
a.custcode = b.custcode AND MONTH(b.date) = 5;

5号是5月份。

确保在要加入的列或作为条件使用的列上设置正确的索引。即a.del,b.no,a.series,b.series,b.cust_code,b.date_added。

a.item上的正则表达式可能是杀手,但除非你可以利用该字段的开头作为锚点,否则索引不会对你有任何好处,即

"LIKE 'NEEDLE%'" 

"REGEXP '^(NEEDLE)|...'"