簡體   English   中英

如何從SQL的同一表中的其他兩個值創建值?

[英]How can I create a value from two other values in the same table in my SQL?

我在SQL數據庫中有一個名為“ orders”的表:

id  date   name  orderID
========================
1   1502   John    ?
2   1502   Jane    ?

當我通過php表單插入數據時,“ id”設置為AUTO_INCREMENT,並創建“ date”:

if ( !empty($_POST)) {
        $name = $_POST['name'];
        $valid = true;


        if ($valid) {
            $pdo = Database::connect();
            $pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
            $sql = "INSERT INTO orders (name,date) values(?,CURDATE())";
            $q = $pdo->prepare($sql);
            $q->execute(array($name));
            Database::disconnect();
        }
}

我希望從值“ id”和“日期”自動創建“ orderID”的值:

id  date   name  orderID
========================
1   1502   John    15021
2   1502   Jane    15022

由於這個事實,該ID是AUTO_INCREMENT您無法使用此值。 但這很簡單。 AFTER INSERT觸發器添加到表中,然后讓它更新orderID列。

這里是AFTER UPDATE觸發器的快速示例。

CREATE TRIGGER yourTrigger
AFTER INSERT
   ON yourTable FOR EACH ROW

BEGIN
    UPDATE yourTable
    SET orderid = CAST(date as char(4)) + CAST(id as char(1))
    WHERE ID = NEW.id

END; 

嘗試

    if ($valid) {
        $pdo = Database::connect();
        $pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
        $sql = "INSERT INTO orders (name,date) values(?,CURDATE())";
        $q = $pdo->prepare($sql);
        $q->execute(array($name));

        $q = $pdo->prepare( '
             update orders
             set orderId = id
             where id = SELECT LAST_INSERT_ID()'
        );
        $q->execute();          

        Database::disconnect();
    }

現在應該工作

SET @last_id_in_table1 = LAST_INSERT_ID();
INSERT INTO orders (name,date,orderID) values(?,CURDATE(),@last_id_in_table1 )

不要在數據庫中創建另一個列來保存此值,它只是重復的數據,只會占用不必要的空間。

檢索數據時,可以使用CONCAT(id, date) AS orderid來獲取串聯值。

例如,要獲取約翰的所有訂單編號:

SELECT CONCAT(id,date) AS orderid from `orders` WHERE `name`="John"

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM