![](/img/trans.png)
[英]How can i use the value of the id in my other table as i create it automated
[英]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.