Как получить запись для суммирования до значения, а затем добавить в две новые таблицы?

0

Я пытаюсь суммировать (добавить значения) из базы данных. Мое приложение проверяет значения из каждой строки, добавляет значение из каждой строки до 2000. И как только оно достигает 2000, оно сохраняет в базе данных (вставить запрос) и продолжает то же самое до получения последней записи. Общая сумма, суммированная (или суммированная) каждым строем, не должна превышать 2000.

Есть два запроса на вставку: один для вставки общего числа (из каждой строки между 1800 и 2000) сгенерированным идентификатором (например, основным), а вторая таблица добавляет каждую строку, вставленную с идентификатором (генерируемый идентификатор становится теперь внешним ключом)

См. Скриншот.

Изображение 174551 Пожалуйста, найдите следующий код:

$i = 1;
do {                
    $id = $row_FetchRecordRS['ID'];
    $dateissued = $row_FetchRecordRS['DateIssued'];
    $rundateCarrierRun = $row_FetchRecordRS['RundateCarrierRunID'];
    $timegenerated = $row_FetchRecordRS['TimeGenerated'];
    $carrierID = $row_FetchRecordRS['CarrierRunID'] ;
    $areaID = $row_FetchRecordRS['CarrierAreaID'];
    $address = $row_FetchRecordRS['DeliveryAddress'];
    $potzone = $row_FetchRecordRS['Postzone'];
    $carr_ID = $row_FetchRecordRS['CarrierID'];
    $instruction = $row_FetchRecordRS['DeliveryAddress'];
    $areaRep =  $row_FetchRecordRS['AreaRepDetails'];
    // $vendor = $row_FetchRecordRS['VendorDetails'];
    $quantity = $row_FetchRecordRS['Quantity'];
    $direct = $row_FetchRecordRS['Direct'];
    $jobID = $row_FetchRecordRS['JobID'];
    $jobName = $row_FetchRecordRS['JobName'];
    $bundlesize = $row_FetchRecordRS['Bundlesize'];
    $bundle = $row_FetchRecordRS['Bundles'];
    $items = $row_FetchRecordRS['Items'];
    $weight = $row_FetchRecordRS['WeightKgs'];
    $totalWeightCol = $row_FetchRecordRS['TotalWeightKgs'];
    $date = date("D M d, Y G:i");

    $total_weight =  $row_FetchRecordRS['FinalWeight'] + $total_weight ;
    echo "Row: " .$row_FetchRecordRS['FinalWeight']. "<br>";
    echo "Total is______  $i : $total_weight <br><br>";  

    $sqlquerytest = "INSERT INTO 'GenerateRun'
        ('DateIssued', 'RundateCarrierRunID', 'TimeGenerated', 
        'CarrierRunID', 'CarrierAreaID', 'DeliveryAddress', 'Postzone', 
        'CarrierID', 'DeliveryInstruction', 'AreaRepDetails',  
        'Quantity', 'Direct', 'JobID', 'JobName', 'Bundlesize',   
        'Bundles', 'Items', 'WeightKgs', 'TotalWeightKgs',   
        'LodingZoneID') 
        VALUES 
        ('$dateissued', '$rundateCarrierRun', '$timegenerated',  
         '$carrierID', '$areaID', '$address', '$potzone', '$carr_ID',  
         '$instruction', '$areaRep', '$quantity', '$direct', '$jobID',  
         '$jobName', '$bundlesize', '$bundle', '$items', '$weight',   
        '$totalWeightCol','$i')";

    mysql_select_db($database_callmtlc_SalmatDB, $callmtlc_SalmatDB);
    $ResultUpd1 = mysql_query($sqlquerytest, $callmtlc_SalmatDB) or die(mysql_error()); 

    if ($total_weight >= 1800) {            
        $sqltransitlist = " INSERT INTO 'TransitList'('genID', 'total') Values ('$i','$total_weight')";
        mysql_select_db($database_callmtlc_SalmatDB, $callmtlc_SalmatDB);
        $ResultUpd3 = mysql_query($sqltransitlist, $callmtlc_SalmatDB) or die(mysql_error());

        $i = $i+1;
        $total_weight = 0;          
    }
} while($row_FetchRecordRS = mysql_fetch_assoc($FetchRecordRS));
  • 0
    Я не совсем слежу за вашим кодом, но я бы посоветовал вам попытаться выяснить, можно ли суммировать внутри MySQL, а не в PHP.
  • 0
    Я попытался вычислить внутри SQL, но не могу получить записи, и я думаю, что я получаю некоторые ошибки
Показать ещё 3 комментария
Теги:

1 ответ

0
Лучший ответ

Некоторые из ваших строк не имеют отношения к вашей проблеме. Я упрощу это для вас.

$i = 1;
$total = 0;
$arr = array(); // for storing a list of data provides that the total doesn't exceed 2000
while ($row = mysql_fetch_assoc($record)) {
    $id = $row['id'];
    $name = $row['name'];
    $num = $row['num'];
    $arr[] = array('id' => $id, 'name' => $name, 'num' => $num);
    if ($num + $total > 2000) {
        $sql = "INSERT INTO Table1(genID, total) Values ('$i','$total')";
        mysql_query($sql) or die(mysql_error());
        foreach ($arr as $data) {
            $sql = "INSERT INTO Table2(ID, name, genID, total) Values ('$data[id]','$data[name]','$i','$data[num]')";
            mysql_query($sql) or die(mysql_error());
        }
        $arr = array(); // empty the array as the data has been stored to database
        $i++;
        $total = 0;   
    } else { // if the total doesn't exceed 2000, add it to total
        $total += $num;
    }
}
$sql = "INSERT INTO Table1(genID, total) Values ('$i','$total')";
mysql_query($sql) or die(mysql_error());
foreach ($arr as $data) {
    $sql = "INSERT INTO Table2(ID, name, genID, total) Values ('$data[id]','$data[name]','$i','$data[num]')";
    mysql_query($sql) or die(mysql_error());
}

Примечание: этот код является всего лишь образцом, а не вашим фактическим кодом. Вы можете реализовать мой код и сопоставить его с вашим кодом.

  • 0
    спасибо Дэвид. Мне просто интересно, где определяется ваш общий доход? или только в начале $ total = 0; ?
  • 0
    Подождите. я отредактирую это.
Показать ещё 8 комментариев

Ещё вопросы

Сообщество Overcoder
Наверх
Меню