在mysql中跨表获取总销售数据查询超时

pes8fvy9  于 2021-06-21  发布在  Mysql
关注(0)|答案(1)|浏览(317)

获取总销售数据。
我在godaddy上有一个mysql数据库,包含以下表格。
客户数据-客户代码、名称等(约450行)
交货数据-日期、发票号、数量等(每月约800行)
我需要得到一个月内所有客户的总销售数据(理想情况下,不同的月份范围将由用户输入分析趋势)。

+---------------+--------+--------+--------+--------+--------+--------+
| 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   |
+---------------+--------+--------+--------+--------+--------+--------+
.....

我试过这么做-
带循环json的php-查询超时,因为有太多数据要处理
excel vba—在服务器上运行查询需要几个小时,所有其他操作都会停止。
以更有效的方式获取这些数据的最佳方式是什么?
编辑1-
sql查询

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++;
}
yzuktlbb

yzuktlbb1#

table 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是五月。
确保在要加入或用作条件的列上设置了正确的索引。即a.del、b.no、a.series、b.series、b.cust\u code、b.date\u added。
item上的正则表达式可能是杀手锏,但索引在那里不会对您有任何好处,除非您可以利用字段的开头作为锚,即

"LIKE 'NEEDLE%'"

或者

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

相关问题