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