繁体   English   中英

插入时自动增加不是主键的列

[英]auto increment a column that is not a primary key when inserted

我的数据库中有一个名为trackingcode的列,它在插入数据库时​​生成 3 个随机数,有没有办法或代码可以让它按顺序生成数字? eg. 001, 002 and so on...

我想过把它作为我数据库上的主键,这样我就可以自动增加它,但如果有办法通过编码来做到这一点,那就太好了。

这是插入代码:

 $connect = mysqli_connect("localhost", "root", "", "pcrequest"); if(isset($_POST["reqname"])) { $length = 3; $trackingcode = substr(str_shuffle("0123456789"), 0, $length); $req_date = $_POST["req_date"]; $reqname = $_POST["reqname"]; $date = $_POST["date"]; $empname = $_POST["empname"]; $position = $_POST["position"]; $account = $_POST["account"]; $platform = $_POST["platform"]; $processor = $_POST["processor"]; $ram = $_POST["ram"]; $monitor = $_POST["monitor"]; $phone = $_POST["phone"]; $phonetype = $_POST["phonetype"]; $headset = $_POST["headset"]; $req_table = $_POST["req_table"]; $req_chair = $_POST["req_chair"]; $approval = $_POST["approval"]; $status = $_POST["status"]; $query = ''; for($count = 0; $count<count($reqname); $count++) { $req_date_clean = mysqli_real_escape_string($connect, $req_date[$count]); $reqname_clean = mysqli_real_escape_string($connect, $reqname[$count]); $date_clean = mysqli_real_escape_string($connect, $date[$count]); $empname_clean = mysqli_real_escape_string($connect, $empname[$count]); $position_clean = mysqli_real_escape_string($connect, $position[$count]); $account_clean = mysqli_real_escape_string($connect, $account[$count]); $platform_clean = mysqli_real_escape_string($connect, $platform[$count]); $processor_clean = mysqli_real_escape_string($connect, $processor[$count]); $ram_clean = mysqli_real_escape_string($connect, $ram[$count]); $monitor_clean = mysqli_real_escape_string($connect, $monitor[$count]); $phone_clean = mysqli_real_escape_string($connect, $phone[$count]); $phonetype_clean = mysqli_real_escape_string($connect, $phonetype[$count]); $headset_clean = mysqli_real_escape_string($connect, $headset[$count]); $req_table_clean = mysqli_real_escape_string($connect, $req_table[$count]); $req_chair_clean = mysqli_real_escape_string($connect, $req_chair[$count]); $approval_clean = mysqli_real_escape_string($connect, $approval[$count]); $status_clean = mysqli_real_escape_string($connect, $status[$count]); if($req_date_clean != '' && $reqname_clean != '' && $date_clean != '' && $empname_clean != '' && $position_clean != '' && $account_clean != '' && $platform_clean != '' && $processor_clean != '' && $ram_clean != '' && $monitor_clean != '' && $phone_clean != '' && $phonetype_clean != '' && $headset_clean != '' && $req_table_clean != '' && $req_chair_clean != '' && $approval_clean != '' && $status_clean != '') { $query .= ' INSERT INTO request(trackingcode, req_date, reqname, date, empname, position, account, platform, processor, ram, monitor, phone, phonetype, headset, req_table, req_chair, approval, status) VALUES("'.$trackingcode.'", "'.$req_date_clean.'", "'.$reqname_clean.'", "'.$date_clean.'", "'.$empname_clean.'", "'.$position_clean.'", "'.$account_clean.'", "'.$platform_clean.'", "'.$processor_clean.'", "'.$ram_clean.'", "'.$monitor_clean.'", "'.$phone_clean.'", "'.$phonetype_clean.'", "'.$headset_clean.'", "'.$req_table_clean.'", "'.$req_chair_clean.'", "'.$approval_clean.'", "'.$status_clean.'"); '; }

 $connect = mysqli_connect("localhost", "root", "", "pcrequest"); if(isset($_POST["reqname"])) { $length = 3; $trackingcode = str_pad($trackingcode, 3, '0', STR_PAD_LEFT); $trackingcode++; $req_date = $_POST["req_date"]; $reqname = $_POST["reqname"]; $date = $_POST["date"]; $empname = $_POST["empname"]; $position = $_POST["position"]; $account = $_POST["account"]; $platform = $_POST["platform"]; $processor = $_POST["processor"]; $ram = $_POST["ram"]; $monitor = $_POST["monitor"]; $phone = $_POST["phone"]; $phonetype = $_POST["phonetype"]; $headset = $_POST["headset"]; $req_table = $_POST["req_table"]; $req_chair = $_POST["req_chair"]; $approval = $_POST["approval"]; $status = $_POST["status"]; $query = '';

在不更新 sql 数据库的情况下实现类似目标的一种方法是检索最后一个跟踪代码,然后使用类似的方法生成下一个:

PHP

// execute a statement like this
SELECT max(trackingcode) FROM your table
// increment the tracking code
$trackingcode++;
// format the tracking code before insertion
str_pad($trackingcode, 3, '0', STR_PAD_LEFT); // 001
// then do your basic insert statement like the one above

您应该考虑向 trackingcode 列添加索引以提高效率

希望这对你有帮助

用这个,希望对你有帮助。

    $connect = mysqli_connect("localhost", "root", "", "pcrequest");
    if(isset($_POST["reqname"]))
    {
    $length = 3;
    $req_date = $_POST["req_date"];
    $reqname = $_POST["reqname"];
    $date = $_POST["date"];
    $empname = $_POST["empname"];
    $position = $_POST["position"];
    $account = $_POST["account"];
    $platform = $_POST["platform"];
    $processor = $_POST["processor"];
    $ram = $_POST["ram"];
    $monitor = $_POST["monitor"];
    $phone = $_POST["phone"];
    $phonetype = $_POST["phonetype"];
    $headset = $_POST["headset"];
    $req_table = $_POST["req_table"];
    $req_chair = $_POST["req_chair"];
    $approval = $_POST["approval"];
    $status = $_POST["status"];
    $query = '';


    for($count = 0; $count<count($reqname); $count++)
    {
    $req_date_clean = mysqli_real_escape_string($connect, $req_date[$count]);
    $reqname_clean = mysqli_real_escape_string($connect, $reqname[$count]);
    $date_clean = mysqli_real_escape_string($connect, $date[$count]);
    $empname_clean = mysqli_real_escape_string($connect, $empname[$count]);
    $position_clean = mysqli_real_escape_string($connect, $position[$count]);
    $account_clean = mysqli_real_escape_string($connect, $account[$count]);
    $platform_clean = mysqli_real_escape_string($connect, $platform[$count]);
    $processor_clean = mysqli_real_escape_string($connect, $processor[$count]);
    $ram_clean = mysqli_real_escape_string($connect, $ram[$count]);
    $monitor_clean = mysqli_real_escape_string($connect, $monitor[$count]);
    $phone_clean = mysqli_real_escape_string($connect, $phone[$count]);
    $phonetype_clean = mysqli_real_escape_string($connect, $phonetype[$count]);
    $headset_clean = mysqli_real_escape_string($connect, $headset[$count]);
    $req_table_clean = mysqli_real_escape_string($connect, $req_table[$count]);
    $req_chair_clean = mysqli_real_escape_string($connect, $req_chair[$count]);
    $approval_clean = mysqli_real_escape_string($connect, $approval[$count]);
    $status_clean = mysqli_real_escape_string($connect, $status[$count]);
    }
    if($req_date_clean != '' && $reqname_clean != '' && $date_clean != '' && $empname_clean != '' && $position_clean != '' && $account_clean != '' && $platform_clean != '' && $processor_clean != '' && $ram_clean != '' && $monitor_clean != '' && $phone_clean != '' && $phonetype_clean != '' && $headset_clean != '' && $req_table_clean != '' && $req_chair_clean != '' && $approval_clean != '' && $status_clean != '')
    {
        $trackingQuery = mysqli_query($con,"SELECT Max(trackingcode) as maxtrack FROM `request`");
        if( mysqli_num_rows($trackingQuery) > 0)
        {
        $Newtracking = mysqli_fetch_assoc($trackingQuery)['maxtrack'] + 1 ;
        }
        else{
        $Newtracking = 1;
        }
        $query .= '
        INSERT INTO request(trackingcode, req_date, reqname, date, empname, position, account, platform, processor, ram, monitor, phone, phonetype, headset, req_table, req_chair, approval, status) 
        VALUES("'.$Newtracking.'", "'.$req_date_clean.'", "'.$reqname_clean.'", "'.$date_clean.'", "'.$empname_clean.'", "'.$position_clean.'", "'.$account_clean.'", "'.$platform_clean.'", "'.$processor_clean.'", "'.$ram_clean.'", "'.$monitor_clean.'", "'.$phone_clean.'", "'.$phonetype_clean.'", "'.$headset_clean.'", "'.$req_table_clean.'", "'.$req_chair_clean.'", "'.$approval_clean.'", "'.$status_clean.'"); 
        ';
    }

    }

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM