![](/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.