Php 用foreach行分隔mysqli结果

Php 用foreach行分隔mysqli结果,php,mysqli,Php,Mysqli,好的,所以我目前正在尝试设置一个脚本,它将在每个月1日作为cron作业运行 我正在建立一个物业管理系统。每个属性的费用都存储在MySQL数据库中 我需要的是脚本遍历每个块并找到各个费用,然后将它们创建为各个发票条目。这是一个有点冗长的方式,但对我们来说是一个有效的方式 更新代码: <?php require_once("lib/common.php"); $sql = "SELECT id,service_charge,utility_charge,ground

好的,所以我目前正在尝试设置一个脚本,它将在每个月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);
   }
}

?>

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

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

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

您知道可以使用switch/case而不定义$ins变量来清除该代码。您可以为处理插入查询,而不是一次又一次地重复代码。要添加到其他注释中,如果重复使用某些查询,可以将其缓存在变量中-查询-而不是结果。只需编辑代码,谢谢提示!最初的问题仍然存在。为什么不将block_id用于您的发票id呢?
$invid
变量用于唯一的发票id。条目的放置方式是作为单独的行。该表有一个自动递增列,即ID。用于检索单个条目。为什么该表有两个ID?它没有。它有一个id(即AI&PK)和一个发票id(将所有条目绑定到相关发票)。我不确定如何在此处添加表结构视图。请运行
SHOW CREATE table invoices
并将生成的CREATE语句添加到您的问题中。