Php 如何求两个连接变量的最大值
我想我弄错了。我有两个变量,一个是日期和月份,另一个是数字(000)。我将这两个变量连接在一起,并将其设置为另一个变量,然后将其插入数据库。因此,我想要更新列,以便每个收据都有唯一的no。收据no格式是(14-07000),我要做的是从插入变量中获取列的最大值,并在每次找到新的最大值时向其添加1。但我没有得到我所需要的。它是插入我想要的,但不是更新。我希望收据编号列为14-7000)。然后开始更新到14-07001、14-07002、14-07003、14-07004、14-07005、14-07006、14-07007等。因此,明天可以更改为15-07000,下个月可以更改为15-08000 这是我使用的代码Php 如何求两个连接变量的最大值,php,mysql,mysqli,Php,Mysql,Mysqli,我想我弄错了。我有两个变量,一个是日期和月份,另一个是数字(000)。我将这两个变量连接在一起,并将其设置为另一个变量,然后将其插入数据库。因此,我想要更新列,以便每个收据都有唯一的no。收据no格式是(14-07000),我要做的是从插入变量中获取列的最大值,并在每次找到新的最大值时向其添加1。但我没有得到我所需要的。它是插入我想要的,但不是更新。我希望收据编号列为14-7000)。然后开始更新到14-07001、14-07002、14-07003、14-07004、14-07005、14-0
<?php
// pass the data into the database
$tran_id1 = date('d-m');
$tran_id2 = "000";
$transaction_id = $tran_id1 . $tran_id2;
if (empty($received & $amount_to_pay & $amount_collected) == false)
{
$sql8 = "INSERT INTO `transactions` (`patient_name`,`total_amount`, `amount_tendered`, `payment_status`, `payment_date`, `paid_for`,`hospital_no`, `received_by`,`receipt_no`) VALUES ('$received', '$amount_to_pay', '$amount_collected', '$payment', '$payment_date', '$being_pay_for','$hosp_no', '$firstname','$transaction_id')";
$query8 = mysqli_query($dbconnect, $sql8) or die (mysqli_error($dbconnect));
$sql9 = "INSERT INTO `transaction_paid_for` (`paid_for_name`) VALUES ('$others')";
$query9 = mysqli_query($dbconnect, $sql9) or die (mysqli_error($dbconnect));
$max = "SELECT MAX(`receipt_no`) AS transaction_id FROM `transactions`";
$max2 = mysqli_query($dbconnect, $max);
$result1 = mysqli_fetch_array($max2);
$result2 = $result1['transaction_id'];
$result3 = $result2+1;
$sql = "UPDATE `transactions` SET `receipt_no`='$result3' WHERE `patient_name`='$received'";
$result4 = mysqli_query($dbconnect, $sql);
}
?>
我猜你不能在varchar字段上使用这样的数学计算。一个好的替代方法是将d-m存储在单独的varchar列中,将递增的数字存储在int列中
然后,您可以使用代码获取所需的收据编号
//create 2 columns in your table eg dm and receipt_no
//to store tran_id1 & tran_id2 into dm and receipt_no columns
$tran_id1 = date('d-m');
$tran_id2 = "000";
// Create connection & select
$sql = "SELECT MAX(receipt_no)+1 MAX_RECEIPT_NO FROM transactions WHERE dm='" . $tran_id1 . "' LIMIT 0,1";
$result = $conn->query($sql);
while($row = $result->fetch_assoc()) {
$tran_id2 = $row["MAX_RECEIPT_NO"];
}
//create your receipt no
$transaction_id = $tran_id1 . str_pad($tran_id2, 3, '0', STR_PAD_LEFT);
//now use sql update with this $transaction_id
注:
- 你的代码没有考虑年份
- 您可能希望避免重复,因此在这两列上设置唯一约束
- 您还可以在事务中封装sql,或使用单独的列进行锁定,请参阅
谢谢你的回答。它可以工作,但我希望它在每一点都添加到最大收据编号1。我的代码选择MAX(收据编号)+1
已经将1添加到最大收据编号。或者,您可以简单地检索MAX并在php代码中添加1。是的。。。。谢谢请问有没有办法对date('d-m')
函数执行算术?就像在ITI中添加1一样,在这种情况下,您可以为d和m使用单独的列,而不是dm的一列。这样您就可以执行算术函数。但根据您的问题,您希望日-月后跟序列号,因此代码$tran_id1=date('d-m')代码>已获取当前日期和月份。