Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/269.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/61.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 如何求两个连接变量的最大值_Php_Mysql_Mysqli - Fatal编程技术网

Php 如何求两个连接变量的最大值

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

我想我弄错了。我有两个变量,一个是日期和月份,另一个是数字(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
    // 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')已获取当前日期和月份。