如何在最后一个数据库条目中插入值?

时间:2015-06-19 09:21:27

标签: php mysql pdo

我有一些棘手的代码,也许你有更好的解决方案:

我想要做的是,从数据库中取出最后一个插入条目的“id”(1),然后在它前面加上两个零(001),取当前的“日期”并格式化它(1506)并将所有(1506001)再次插入到我的数据库中的同一行中,进入“orderID”。

        $pdo = Database::connect();
        $pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);

        $sql1 = 'SELECT * FROM orders ORDER BY `date` DESC LIMIT 1';
        foreach ($pdo->query($sql1) as $row) {

          $dateID = date("ym", strtotime($row['date'])); 
          $id = sprintf("%03d", $row['id']);
          $orderID = $dateID.$id;

          $sql2 = "INSERT INTO orders (orderID) values('$orderID') ";
          $q2 = $pdo->prepare($sql2);
          $q2->execute();

          Database::disconnect();
        }

例如:

id  date   name    orderID
==========================
1   1505   John    1505001
2   1505   Jane    1505002
1   1506   Mad     1506001
2   1506   Fred    1506002

现在发生的是,创建了一个新行。 “oderID”的值不存储在同一行中,我不知道如何实现这一点。

3 个答案:

答案 0 :(得分:0)

您需要使用UPDATE代替INSERT

    $sql2 = "UPDATE `orders` SET `orderID` = '$orderID' 
    WHERE 
        `id` = {$row['id']} 
    AND `date` ='{$row['date']}'
    AND `name` = '{$row['name']}' 
    AND `orderID` ='{$row['orderID']}'
    AND `orderID` != '$orderID'";

答案 1 :(得分:0)

我假设在第一次INSERT之后,字段orderID为NULL 因此,您可以运行更新所有记录WHERE orderID IS NULL的查询。不需要将任何值拉入PHP,MySQL的lpad(),date_format()和concat函数应该可以解决问题。

sscce

<?php
$pdo = new PDO('mysql:host=localhost;dbname=test;charset=utf8', 'localonly', 'localonly', array(
    PDO::MYSQL_ATTR_DIRECT_QUERY => false,
    PDO::ATTR_ERRMODE=>PDO::ERRMODE_EXCEPTION
));
setup($pdo);

/* insert new orders */
$stmt = $pdo->prepare('INSERT INTO soFoo (`name`, `date`) VALUES (:name, Now())');
$stmt->bindParam('name', $name);
foreach( array('John', 'Jane', 'Matt', 'Fred') as $name ) {
    $stmt->execute();
}

/* 'fix' orderIDs */
$pdo->exec("
    UPDATE
        soFoo
    SET
        orderID = concat(
            date_format(`date`, '%y%m'),
            lpad(`id`, 3, '0')
        )
    WHERE
        orderID IS NULL
");


/* print result */
foreach( $pdo->query('SELECT * FROM soFoo', PDO::FETCH_ASSOC) as $r ) {
    echo join(', ', $r), "\r\n";
}


function setup($pdo) {
    $pdo->exec('
        CREATE TEMPORARY TABLE soFoo (
            `id` int auto_increment,
            `date` Date,
            `name` varchar(32),
            `orderID` varchar(32),
            primary key(id)
        )'
    );
}

打印(今天):

1, 2015-06-19, John, 1506001
2, 2015-06-19, Jane, 1506002
3, 2015-06-19, Matt, 1506003
4, 2015-06-19, Fred, 1506004

......但是,如果该表中有一千个订单,那么仍然会留下一个问题。

答案 2 :(得分:0)

您需要做的就是:

  1. 使用 mysql_insert_id()获取最后插入的内容
  2. 为字段orderID
  3. 创建新值
  4. 更新您的表格以获取您的身份 mysql_insert_id()