【问题标题】:PHP MySQL - Code generator using different table recordsPHP MySQL - 使用不同表记录的代码生成器
【发布时间】:2012-10-04 13:41:47
【问题描述】:

又是我,

在这种情况下,我有一个记帐代码表 [ACCOUNTINGCODE],其中包含以下字段:
ACC1CUST(例如:IVMA)
ACC2DATE(例如:12)
ACC3NROFPROJ(例如:05)
ACC4USER(例如:京东)

让我解释一下。
以下是会计代码的示例:
IVMA-12-01-JD
IVMA-12-02-RP
IVMA-12-03-WD
IVMA-12-04-JD

ACC1CUST 填充有 [CUSTOMER] 的 NAMECODE。
ACC2DATE 是用户制作 [ACCOUNTINGCOE] 年份的 2 个结束编号。
ACC3NROFPROJ 是同一[CUSTOMER] 在同一年的项目数。所以 ACC1CUST、ACC2DATE 和 ACC3NROFPROJ 相互依赖。
ACC4USER 是 [EXECUTOR] 的 NAMECODE,所以这在这里并不重要。

我做了一个生成器查询。该生成器在他在 [会计代码] 中拥有的 MAX 个项目上计数 +1。但我的代码不取决于年份(ACC2DATE)。因此,如果我已经拥有 IVMA-12-01-JD 并且接下来放置 IVMA-13,它将不会从 01 重新开始,而是从 02 继续。当然,因为我的代码正在检查 ACC1CUST 的项目数量。

我的查询是:

$projectcount="
SELECT accountingcode.custid, customer.custid, MAX(acc3nrofproj) as 'projects'
FROM accountingcode, customer
WHERE accountingcode.custid= customer.custid
AND customer.custid = '$custid'
";

$result3=mysql_query($projectcount) or die("query fout " . mysql_error() );
while( $record3=mysql_fetch_array($result3) )
{
$projectcount=$record3['projects'];
$projectcount = $projectcount+1;
$format = '%1$03s';
$formatprojectcount = sprintf($format, $projectcount);
}

但是,如果您开始新的一年,而 ACC2DATE 中已经不存在,这没有任何区别。

有谁知道我该如何完成这项工作?

非常感谢您!

找到了

    $projectcount="
      SELECT accountingcode.custid, accountingcode.acc2date, MAX(acc3nrofproj) as 'projects'
      FROM accountingcode, customer
      WHERE accountingcode.custid= customer.custid
      AND customer.custid = '$custid'
      AND acc2date = '$formatdatefrom'
      ";

    $result3=mysql_query($projectcount) or die("query fout " . mysql_error() );
    while( $record3=mysql_fetch_array($result3) )
    {
        $projectcount=$record3['projects'];
        $projectcount = $projectcount+1;
        $format = '%1$03s';
        $formatprojectcount = sprintf($format, $projectcount);
    }

【问题讨论】:

    标签: php mysql system generator


    【解决方案1】:
    for($i = $startYear/*03, Let's say.*/; i <= $endYear /*12?*/; i++)
    {
    
        $projectcount="SELECT accountingcode.custid, customer.custid, MAX(acc3nrofproj) as 'projects'
          FROM accountingcode, customer
          WHERE accountingcode.custid= customer.custid
          AND customer.custid = '$custid'
          AND ACC2DATE = $i";
    
        $result3=mysql_query($projectcount) or die("query fout " . mysql_error() );
        while( $record3=mysql_fetch_array($result3) )
        {
            $projectcount=$record3['projects'];
            $projectcount = $projectcount+1;
            $format = '%1$03s';
            $formatprojectcount = sprintf($format, $projectcount);
        }
    }
    

    在从 baseYear 到最后一年的 for 循环中使用上述查询。

    【讨论】:

    • 我一直在考虑循环执行它,但我想从 2012 年到我不知道,2500? Idd,从头到尾要多一点..精心设计。我只是不知道如何构建它......
    • @IvanM,我建议您将两位数年份的使用更改为四位数,这样可以避免您以后的麻烦。
    • 非常感谢!!将 startyear 设置为 ACC2DATE 的 MIN 并将 endyear 设置为 ACC2DATE 的 MAX 不是更好吗?我只是进行查询,记录它,并将其设置为 $i = $startYearAccodingToQuery...对吗?
    • 不,没关系。此代码是在 ACC2DATE 甚至发布到 DB 之前生成的。我就这么做!非常感谢!我现在就试一试。
    • 是的,在数据​​库中将 MIN 和 MAX 预设为 MIN/MAX 年,这对你来说很聪明。 :) @IvanM
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2022-08-15
    • 1970-01-01
    • 1970-01-01
    • 2010-11-20
    • 2018-12-05
    • 1970-01-01
    • 2010-09-18
    相关资源
    最近更新 更多