使用foreach行分隔mysqli结果

时间:2014-05-19 14:01:19

标签: php mysqli

好的,所以我目前正在尝试设置一个脚本,该脚本将在每月1日作为cron作业运行。

我所建造的物业管理系统。每个属性都将其费用存储在MySQL数据库中。

我需要的是脚本遍历每个块并查找单独的费用,然后将它们创建为单独的发票条目。这有点长篇大论,但对我们有用。

更新的代码:

    <?php

    require_once("lib/common.php");

    $sql = "SELECT id,service_charge,utility_charge,ground_rent,insurance,communalcleaning,maintenance FROM blocks GROUP BY id";

    $rs = $conn->query($sql);

    while($r = $rs->fetch_assoc()){

     foreach($r as $key=>$value) {
      $blkid = $r['id'];
      $invid = time();
      $date = date('Y-m-d');
      switch($key) {
        case "service_charge":
            $type = "Service Charge";
            break;
        case "utility_charge":
            $type = "Utility Charge";
            break;
        case "ground_rent":
            $type = "Ground Rent";
            break;
        case "insurance":
            $type = "Insurance";
            break;
        case "communalcleaning":
            $type = "Communal Cleaning";
            break;
        case "maintenance":
            $type = "Maintenance";
            $ins2 = "INSERT INTO incomings (id,block_id,amount,date) VALUES ('','$blkid','$value','$date')";
            $conn->query($ins2);
            break;
    }

    $ins = "INSERT INTO invoices(id,invoice_id,block_id,entry_description,entry_amount,entry_date) VALUES('','$invid','$blkid','$type','$value','$date')";
    $conn->query($ins);
   }
}

?>

**编辑**

好的,我现在已经将代码编辑为一个更明智的解决方案。问题仍然存在,我需要为每个&#34; block_id&#34;创建新的$invid。从blocks表中提取。

目前为两个块生成相同的$invid。它按预期分隔所有$key=>$value,只是不拆分发票。

我希望我已经解释得这么好了!如有任何问题,请咨询!

提前致谢。

1 个答案:

答案 0 :(得分:0)

您将$invid设置为time(),这精确到秒。计算机比这快得多,因此$invid将在循环中重复设置为相同的数字。通常的方法是在MySQL中使用自动递增列,因此它将自己处理插入id列的递增数字。以下是修复表格的方法:

ALTER TABLE `invoices` CHANGE `id` `id` INT(11) NOT NULL AUTO_INCREMENT;

之后,调整您的PHP代码,使其甚至不会尝试为id插入值。删除$invid变量,并从INSERT语句中的列和值列表中删除id列。