在本地主机中而不在服务器中工作的递归过程

问题描述

我有两个不同的表用户和invoice_order

用户表-

+-------+-------+-----------+
| pid   | fname |    iid    |                
+=======+=======+===========+
| sk001 | aa    | null      |
+-------+-------+-----------+
| sk002 | ss    | ssk001    |
+-------+-------+-----------+
| sk003 | dd    | sk001     |
+-------+-------+-----------+
| sk004 | ff    | sk002     |
+-------+-------+-----------+
| sk005 | gg    | sk002     |
+-------+-------+-----------+
| sk006 | hh    | sk005     |
+-------+-------+-----------+
| sk007 | jj    | sk006     |
+-------+-------+-----------+
| sk008 | kk    | sk006     |
+-------+-------+-----------+
| sk009 | ll    | sk004     |
+-------+-------+-----------+
| sk010 | mm    | sk005     |
+-------+-------+-----------+
      Here `pid` is personal id of the user and `iid` is the parent_id of the users 
      

发票顺序表-

+-------+-------+-----------+--------+
| pid   | fname | iid       |order_to|
+=======+=======+===========+========+
| sk001 | aa    | null      | 100    |
+-------+-------+-----------+--------+
| sk002 | ss    | ssk001    | 400    |
+-------+-------+-----------+--------+
| sk002 | dd    | sk001     | 225    |
+-------+-------+-----------+--------+
| sk004 | ff    | sk002     | 50     |
+-------+-------+-----------+--------+
| sk005 | gg    | sk002     | 59     |
+-------+-------+-----------+--------+
| sk006 | hh    | sk005     | 77     |
+-------+-------+-----------+--------+
| sk007 | jj    | sk006     | 89     |
+-------+-------+-----------+--------+
| sk004 | ff    | sk002     | 87     |
+-------+-------+-----------+--------+
| sk009 | ll    | sk004     | 45     |
+-------+-------+-----------+--------+
| sk010 | mm    | sk005     | 56     |
+-------+-------+-----------+--------+

我正在使用过程team_total_test通过该过程中的递归查询来计算单个用户的团队总数

    DELIMITER $$
    CREATE DEFINER=`root`@`localhost` PROCEDURE `team_total_test`(IN `userid` VARCHAR(200))
        NO sql
    BEGIN
    CREATE TABLE tt_3 (pid VARCHAR(100),iid VARCHAR(100),total INT(250));
    INSERT INTO tt_3  SELECT  pid,iid,0
    from    (SELECT pid,iid from users
             order by pid,iid) users,(SELECT @pv := userid) initialisation
    where   find_in_set(iid,@pv) > 0
    and     length(@pv := concat(@pv,',pid)) order by iid ASC;
       UPDATE tt_3 
       SET total=(SELECT (SUM(order_total_before_tax))/2 FROM invoice_order WHERE tt_3.pid=invoice_order.pid 
         AND MONTH(order_date)=MONTH(Now()) AND YEAR(order_date)=YEAR(Now()) );
        SELECT  sum(total) as total_pv
    from    tt_3 ;
       SELECT COUNT(pid) as counting FROM tt_3;
       DROP TABLE tt_3 ;
    END$$
    DELIMITER ;

问题是我在本地主机而不是服务器中获得正确的输出 本地主机的输出

output from localhost

服务器中的输出

output in server

解决方法

有两种可能性

  1. 服务器时钟与本地时钟不同(因此月份可能是---一个是10月,一个是11月)-因为我注意到您的SQL包含MONTH(NOW())参数。

  2. 您本地环境的区分大小写可能与服务器的区分大小写有所不同(例如,一台Windows机器可能会将CASE和大小写相同,但是linux肯定会将它们视为不同)