0

よろしくお願いします。各アフィリエイトの販売数と総販売額をカウントする PHP スクリプトを作成したいと考えています。関連する 2 つのファイルがあります (csv と txt)。CSV と TXT のサンプル データは次のとおりです。

//Sales.csv
Customer Id,Name,Surname,ID Number,Type,Member Type,Amount,Lead Supplier,Type,Outcome
2759,Hlompho,Molakalaka,8305066090080,Debit Order,Subscriber,69,Company,New Sale,Sucessful
6884,Ndanganen,Tshidavhu,7902065808081,Debit Order,Subscriber,69,Company,New Sale,Sucessful
11583,Shoaib,Solomon,8308015072084,Debit Order,Subscriber,59,Company,Revenue,Sucessful
15507,Rathanambal,Govender,7312190242083,Debit Order,Subscriber,69,Company,Revenue,Sucessful
17456,Dumisani,Tshabalala,8406275675081,Debit Order,Subscriber,59,Company,Revenue,Sucessful
17640,Nomadlozi,Magagula,9201110277089,Debit Order,Subscriber,59,Company,Revenue,Sucessful
21545,Jason,Goosen,9003105124080,Debit Order,Subscriber,59,Company,Revenue,Sucessful
22001,Jacques,Kok,8503025107082,Debit Order,Subscriber,59,Company,Revenue,Sucessful
25137,Natelly,Erasmus,8803210085089,Debit Order,Subscriber,59,Company,Revenue,Sucessful
25431,Mfanufikile,Nala,8211085667082,Debit Order,Subscriber,59,Company,Revenue,Sucessful

//Report.txt
Date,Affiliate ID,Unique ID,Firstname,Lastname,ID Number,Phone,Email,Status,Reference Number
2013-05-01 0:05,1017,u104101722ne3001hj,Shoaib,Solomon,8308015072084,083-651-9877,mxoalarm.alarm@gmail.com,success=true;,146213
2013-05-01 1:58,1009,kf04100923fr3053vp,Hlompho,Molakalaka,8305066090080,0781257255,nkoanat@yahoo.com,success=true;,0
2013-05-01 1:58,1018,dv04101823c730573u,nasiera,hardy,8810160145086,082-346-6104,nasierahardy@yahoo.com,success=true;,146216
2013-05-01 2:00,1013,v04101323ks3057gp,Hlompho,Molakalaka,8305066090080,0763283541,pimpmybodytattoos@gmail.com,success=true;,146217
2013-05-01 2:01,1018,n504101823mh3059w2,zaid,slamdien,8409245240085,071-232-7059,zaid.slamdien@yahoo.com,success=true;,146218
2013-05-01 2:17,1013,pr0510130qy0116j4,zaid,slamdien,8409245240085,071-232-7059,zaid.slamdien@yahoo.com,success=true;,0
2013-05-01 2:18,1013,gd0510130pj0117rm,Dumisani,Tshabalala,8406275675081,082-346-6104,nasierahardy@yahoo.com,success=true;,0
2013-05-01 3:11,1013,oh05101312x0104gf,Lucky Magnificent,Mabena,8104165398084,072-758-4097,lucky.mabena@sasol.com,success=true;,0
2013-05-01 3:34,1001,8c0510011180132t,Nomadlozi,Magagula,9201110277089,084-028-7128,chaddo913@gmail.com,success=true

基本的に、スクリプトは csv ファイルのすべての行で ID 番号を取得し、txt で同じ ID 番号を持つ最初のアフィリエイトを検索します。(ID 番号がファイルに複数回表示される場合は、その ID 番号を持つ最初のアフィリエイトにのみカウント/クレジットされます) 次に、アフィリエイトが行った販売数とその販売の合計をカウントします。アフィリエイトは、そのアフィリエイト ID によって決定されます。ID 番号が txt 内のどのアフィリエイトとも一致しない場合、1 がアフィリエイト ID として使用されます。出力例は次のとおりです。

/* AffiliateID,NumberOfSales,TotalAmount */
1001,24,678
1009,72,328
1,3,144 //Sales with no match in the txt uses 1 as aff ID.

スクリプトを作成しようと何度か試みましたが、役に立ちませんでした。誰かがここで私を助けてくれることを願っています。ありがとう!

更新:データベースに2つのテーブルを作成することにしました.csvとtxtデータをそれぞれ保存するために、手数料とログです。ここから、必要な出力を取得するために MySQL クエリを実行しました。コードは次のとおりです。

<?php

//Convert Spreadsheet (XLSX) to CSV
    require_once '../classes/PHPExcel/IOFactory.php';

    //Set maximum execution time to 1 hour.
    ini_set('max_execution_time', 3600);

    $excel = PHPExcel_IOFactory::load("Kudough Commision Report.xlsx");
    $writer = PHPExcel_IOFactory::createWriter($excel, 'CSV');
    $writer->setDelimiter(",");
    $writer->setEnclosure("");
    $writer->setSheetIndex(1);
    $writer->save("commissions".date('Ym').".csv");

//Establish a MySQL Database Connection.
$con = mysqli_connect("localhost","root","","kudough");

    if (mysqli_connect_errno($con)) {
        echo "Failed to connect to MySQL: " . mysqli_connect_error();
    }

//Save the CSV to the database.
$file1 = "commissions".date('Ym').".csv"; //CSV filename

$handle1 = @fopen($file1, "r");
    if ($handle1) {
    while (($buffer1 = fgets($handle1, 4096)) !== false) {

        //Get Variables.
        $var1 = explode(",", $buffer1);
        $cid = @$var1[0];
        $fname = @str_replace("'","",$var1[1]);
        $lname = @str_replace("'","",$var1[2]);
        $idnumber = @$var1[3];
        $type = @$var1[4];
        $membertype = @$var1[5];
        $amount = @$var1[6];
        $leadsupplier = @$var1[7];
        $saletype = @$var1[8];
        $outcome = @$var1[9];

        $sql = "INSERT IGNORE INTO commissions (customer_id, name, surname, idnumber, type, member_type, amount, leadsupplier, saletype, outcome) VALUES ('$cid', '$fname', '$lname', '$idnumber', '$type', '$membertype', '$amount', '$leadsupplier', '$saletype', '$outcome')";

        if (!mysqli_query($con,$sql)) {
            die('Error: ' . mysqli_error($con));
        }
    }
    if (!feof($handle1)) {
        echo "Error: unexpected fgets() fail\n";
    }
    fclose($handle1);
    }

//Save the TXT to the database.
$file2 = "kudough201305.txt"; //TXT filename

$handle2 = @fopen($file2, "r");
    if ($handle2) {
    while (($buffer2 = fgets($handle2, 4096)) !== false) {

        //Get Variables.
        $var2 = explode(",", $buffer2);
        $logdate = @$var2[0];
        $aff_id = @$var2[1];
        $unique_id = @$var2[2];
        $fname = @$var2[3];
        $lname = @$var2[4];
        $idnumber = @$var2[5];
        $phone = @$var2[6];
        $email = @$var2[7];
        $trax = @$var2[8];
        $ref = @$var2[9];

        $sql = "INSERT IGNORE INTO log (logdate, aff_id, unique_id, fname, lname, idnumber, phone, email, trax, ref) VALUES ('$logdate', '$aff_id', '$unique_id', '$fname', '$lname', '$idnumber', '$phone', '$email', '$trax', '$ref')";

        if (!mysqli_query($con,$sql)) {
            die('Error: ' . mysqli_error($con));
        }
    }
    if (!feof($handle2)) {
        echo "Error: unexpected fgets() fail\n";
    }
    fclose($handle2);
    }

    //Count the number of sales and total amount of sales each affiliate has made.
$sql = "SELECT T2.aff_id AS affID, COUNT(T2.idnumber) AS numofsales, SUM(amount) AS totalsales FROM (SELECT aff_id, T1.idnumber, T1.amount FROM (SELECT * FROM commissions WHERE leadsupplier = 'IMUpstart' GROUP BY commissions.idnumber) AS T1 INNER JOIN log WHERE T1.idnumber = log.idnumber GROUP BY T1.idnumber) AS T2 GROUP BY T2.aff_id";

$rs = mysqli_query($con,$sql);

    while($row = mysqli_fetch_array($rs)) { 

        $affID = $row['affID'];
        $numofsales = $row['numofsales'];
        $totalsales = $row['totalsales'];

        //Write to CSV
        $entrydetails = $affID.", ".$numofsales.", ".$totalsales;
        WriteCSVFile($entrydetails);
    }

mysqli_close($con);
?>

MySQLステートメントが正しいかどうかはよくわかりません。私の問題は、txt ではなく csv で見つかった ID 番号のすべての売上の合計を見つけることです。コードを改善するための提案があれば、お知らせください。ありがとう!:)

4

2 に答える 2

0

コード全体を記述するつもりはありませんが、基本的には各ファイルを 1 行ずつ調べて、すべてのデータを多次元配列 (配列 [行番号] [列番号]) に分割する必要があります。これがそのコードです

$file = 'sales.csv'; //make this point to the file
$sales = array();
$file_handle = fopen($file, "r");
while (!feof($file_handle)) {
    $line = rtrim(fgets($file_handle));

}
fclose($file_handle);

これにより、売上のすべてのデータの $sales 配列が作成されます。次に、report.txt に対して同じ操作を行います。

次に、ループ内のループを実行して、両方の配列を調べ、必要なものをすべてチェックします。多分誰かが親切で、もっとコードを書き出すでしょう

for($i=0;$i<count($sales);$i++){
 for($j=0;$j<count($report);$j++){
  $saleID = $sales[$i][3]; // sales id number of current row
  $reportID = $report[$j][5]; //report id number of current row

  if($salesID == $reportID){
   //sales id and report id match

  }

 }
}

そんな感じ。あなたが記入できる残りの部分

于 2013-06-11T16:46:31.727 に答える