我下面的php代码允许我从数据库中获取当天的订单信息并将其保存在CSV文件中。这些数据包括订单的一般信息、客户信息和订购的产品。
<?php
require_once 'dbconfig.php';
try {
$pdo = new PDO("mysql:host=$host;dbname=$dbname", $username, $password);
// SQL query that will search the database for the orders of the day (or here on the given date). The orders contain the information of the products etc..
$sql = 'SELECT o.id_order ,c.id_customer, c.firstname, c.lastname, a.address1, a.address2, a.postcode, a.city,a.phone,c.email,a.phone_mobile, od.product_id,
od.product_name,od.product_quantity, od.product_price,o.total_paid_tax_incl, c.id_customer, op.date_add, op.amount, op.payment_method
FROM mod582_orders o
INNER JOIN mod582_customer c ON o.id_customer = c.id_customer
INNER JOIN mod582_address a ON o.id_address_delivery = a.id_address
INNER JOIN mod582_order_detail od ON o.id_order = od.id_order
INNER JOIN mod582_order_payment op ON o.reference = op.order_reference
WHERE CAST(o.date_add AS DATE) like "2022-12%";
';
$r = $pdo->query($sql);
$tab = [];
$tab[] = ['ORDNOORDER', 'ORDREFCUSORDER', 'ORDNOCOSTNUMBER', 'ORDNOCUSTOMER', 'ORDCUSTOMERCODE', 'ORDCUSCAT', 'ORDTYPE', 'ORDCURRENCY', 'ORDCURRENCYRATE', 'ORDDESIGNATION',
'ORDREPCODE', 'ORDPORT', 'ORDPORTTYPE', 'ORDPORTRATE', 'DEONOORDER', 'DEOCOMMENT', 'DEOCOUNTRY', 'DEONAME', 'DEOFIRSTNAME', 'DEOADDRESS1', 'DEOADDRESS2', 'DEOZIPCODE', 'DEOCITY',
'DEOPHONE', 'DEOMAIL', 'DEOPHONEPORTABLE', 'ODLNOORDER', 'ODLNOORDERLINE', 'ODLNOARTICLE', 'ODLARTDESIGN', 'ODLQUANTITYORDER', 'ODLTTCCURUPRICE', 'ODLCODEPARCELLEFLEU',
'PAYNUMPAYMENT', 'PAYNOCUSTOMER', 'PAYNOORDER', 'PAYNOCURRENCY', 'PAYDATEPAYMENT', 'PAYPAYMENTTTCCUR', 'PAYCURRENCYRATE', 'PAYCONTREPARTIE'];
$odrline = 0; // start with zero, as incremented before first written out
$prevordernumber = 0; // pick a number that is not a valid order number
// or empty string if not numeric
// Open the File
$file = fopen("ArticlesStock.csv", "r");
$i = 0;
// as long as is not end of file continue loop through
while (!feof($file)) {
// get the file string by line
$thisLine = fgets($file);
// Explode the line when there is a "; "
$personData[$i] = explode(";", $thisLine);
$i++;
}
// Number of Rows
$numRows = sizeof($personData);
// Loop Through the Array
$i = 1;
$productID = 0;
$productName = "";
//Add the query result to the tab
while ($rs = $r->fetch(PDO::FETCH_ASSOC)) {
if ($prevordernumber != $rs['id_order']) //if the ID of the previous command is different from that of the current command
{
while ($i < $numRows) {
if (str_contains($personData[$i][2], $rs['product_name'])) { //if the product name returned by the query is equal to a product name in the csv ArticleStock
$productName = $personData[$i][2]; //save the product name of the csv file ArticleStock in the variable
$productID = $personData[$i][0]; //save the product id of the csv file ArticleStock in the variable
$odrline++;
$baseDate = strtotime($rs['date_add']);
$formatDate = date("d/m/Y", $baseDate); //convert the date to appropriate format
$tab[] = [$rs['id_order'], $rs['id_order'], '17', '', 'AAA' . $rs['id_customer'], 'DET', 'O', 'EUR', '1', '', '115', 'D', 'P', '17', $rs['id_order'], '', 'FRA', $rs['firstname'],
$rs['lastname'], $rs['address1'], $rs['address2'], $rs['postcode'], $rs['city'], $rs['phone'], $rs['email'], $rs['phone_mobile'], $rs['id_order'], $odrline,
$productID, $productName, $rs['product_quantity'], $rs['product_price'], '', '', '', $rs['id_order'], 'EUR', $formatDate, $rs['amount'], '1', 'VIR'];
//we add the precedent variable on the final csv file
}
$i++;
}
} else {//if the ID of the previous order is equal to that of the current order
$tab[] = [$rs['id_order'], $rs['id_order'], '17', '', 'AAA' . $rs['id_customer'], 'DET', 'O', 'EUR', '1', '', '115', 'D', 'P', '17', $rs['id_order'], '', 'FRA', $rs['firstname'],
$rs['lastname'], $rs['address1'], $rs['address2'], $rs['postcode'], $rs['city'], $rs['phone'], $rs['email'], $rs['phone_mobile'], $rs['id_order'], $odrline,
$rs['product_id'], $rs['product_name'], $rs['product_quantity'], $rs['product_price'], '', '', '', $rs['id_order'], '', '', '', ''];
}
$prevordernumber = $rs['id_order'];
}
fclose($file); //Close the ArticlesStock CSV file
// write $tab to file
$date = date('d-m-y');
$fichier_csv = new SplFileObject('commandes_' . $date . '.csv', 'w'); //Save the final csv file
foreach ($tab as $ligne) {
$fichier_csv->fputcsv($ligne, ';');
}
} catch (PDOException $e) {
die("Could not connect to the database $dbname :" . $e->getMessage());
}
不过,我也有一个股票csv文件包含产品信息.(ID,产品名称,数量等.)
ArticleStock文件中存在的数据示例:
问题是数据库和股票csv文件之间的产品ID和名称不相同。
按要求退回产品的示例:
因此,当我的查询获取信息时,我需要比较返回的产品名称,以查看它们是否存在于ArticleStock文件中,如果是,则在最终的CSV文件中添加来自ArticleStock文件而不是来自SQL查询的产品名称和ID
1条答案
按热度按时间lb3vh1jj1#
问题简而言之:ProductID已损坏,因此我们需要比较产品名称。但是产品名称的格式不相似,并且部分文本不同:
当你面对一个大问题时,你需要分而治之。首先,我们可以把所有的东西都放到同一个大小写(小写):
然后,您就可以使用split进行真正的除法了(我没想到这会变成一个双关语):
如果您可以确保数据库条目的字数始终少于csv条目,并且字数相同,则如果数据库条目包含另一个csv条目的每个单词,您就知道前者与后者相对应。