出于個人統計目的,我通過 API 端點檢查最后 500 筆銷售,該端點每 30 分鐘向我發送一個 CSV 作為回報。
CSV 是這樣制作的:
| 客戶ID | 時間戳 | 銷售 | 委員會 | 注冊日期 |
|---|---|---|---|---|
| 3656323 | 2022 年 1 月 12 日 23:42 | 10.00 | 2.00 | 2019 年 1 月 23 日 12:34 |
| 1456324 | 2022 年 1 月 12 日 21:42 | 100.00 | 20.00 | 2018 年 12 月 15 日 21:34 |
| 1456324 | 2022 年 1 月 12 日 21:42 | 100.00 | 20.00 | 2018 年 12 月 15 日 21:34 |
| 4213516 | 2022 年 1 月 12 日 18:42 | 120.00 | 24.00 | 2020 年 7 月 25 日 13:34 |
由于我每 30 分鐘呼叫一次相同的端點,我得到相同的 CSV,并且大多數時候相同的行重新出現(我可能連續有完全相同的表 2 呼叫)因此,我通過檢查殺死了所有重復項客戶 ID 和時間戳。我當時覺得還好。
我的問題是:正如您在上面的示例中看到的,客戶、時間戳和金額在 2 行上是相似的。這不是一個錯誤,它實際上是雙重購買。就我而言,我不會采用第二行,因為它將被視為重復。我希望將其包含在我的統計資訊中,但我不確定如何。
這種特定問題是否有任何已知的解決方案?
我擁有的實際代碼:(資料示例可能與代碼中的不同)
$handle = fopen('https://url.com/csv/?limit=500','r');
if($handle){
while ( ($data = fgetcsv($handle) ) != FALSE ) {
if($flag) { $flag = false; continue; }
$timestamp = date("Y-m-d H:i:s", strtotime($data[0]));
$signup_date = date("Y-m-d H:i:s", strtotime($data[5]));
$amount = str_replace(".", ".", $data[2]);
$commission = str_replace(".", ".", $data[3]);
$exists = money_line_exists($timestamp, $data[1]);
if(($exists == 0) && ($amount != "0.00") && (is_numeric($data[1]))){
add_new_money($timestamp, $data[1], $amount, $commission, $data[4], $signup_date, $data[6], 1);
}
}
}
而money_line_exists() 函式如下:
function money_line_exists($date, $id){
$db = connect_db();
$result = $db->query("SELECT * FROM money WHERE date_bill = '$date' AND user_id = '$id'");
if($result->num_rows == 0) {
return 0;
} else {
return 1 ;
}
$mysqli->close();
}
提前致謝
注意:這是為了清晰和格式的重新發布。
uj5u.com熱心網友回復:
那么說“在單個回應中”保留重復項,“跨回應”洗掉重復項是否正確?
正確的。我保留的重復項,我洗掉的重復項
如果是這種情況,請在決議整個回應之前不要插入行。這樣,您只需針對先前插入的行查詢您的資料庫。
$new_lines = [];
while ( ($data = fgetcsv($handle) ) != FALSE ) {
// ...
$exists = money_line_exists($timestamp, $data[1]);
if(($exists == 0) && ($amount != "0.00") && (is_numeric($data[1]))){
$new_lines[] = [
$timestamp,
$data[1],
$amount,
$commission,
$data[4],
$signup_date,
$data[6],
1
];
}
}
foreach ($new_lines as $line) {
add_new_money(...$line);
}
uj5u.com熱心網友回復:
最簡單的解決方案是添加另一個資料列(訂單 ID)以確保行再次唯一。如果真正的雙重購買和第二次閱讀看起來相似,則沒有其他方法可以不包含或包含該行。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/409990.html
標籤:
