[英]How can I create a value from two other values in the same table in my SQL?
I have a table named "orders" in an SQL database: 我在SQL数据库中有一个名为“ orders”的表:
id date name orderID
========================
1 1502 John ?
2 1502 Jane ?
The "id" is set to AUTO_INCREMENT and the "date" is created when I insert data via my php form: 当我通过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();
}
}
I wish that the value for "orderID" is created automatically from the values "id" and "date": 我希望从值“ id”和“日期”自动创建“ orderID”的值:
id date name orderID
========================
1 1502 John 15021
2 1502 Jane 15022
Due to the fact, that the id is an AUTO_INCREMENT
you have no hand on this value. 由于这个事实,该ID是AUTO_INCREMENT
您无法使用此值。 But it's quite simple. 但这很简单。 Add a AFTER INSERT
trigger to the table and let it update the orderID
column afterwards. 将AFTER INSERT
触发器添加到表中,然后让它更新orderID
列。
Here a quick example of a AFTER UPDATE
trigger. 这里是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;
try 尝试
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();
}
should work now 现在应该工作
SET @last_id_in_table1 = LAST_INSERT_ID();
INSERT INTO orders (name,date,orderID) values(?,CURDATE(),@last_id_in_table1 )
Don't create another column in your database to hold this value, it's just duplicated data and will only serve to take up unnecessary space. 不要在数据库中创建另一个列来保存此值,它只是重复的数据,只会占用不必要的空间。
When you are retrieving data you can use CONCAT(id, date) AS orderid
to get the concatenated value. 检索数据时,可以使用CONCAT(id, date) AS orderid
来获取串联值。
For example, to get all orderids for John: 例如,要获取约翰的所有订单编号:
SELECT CONCAT(id,date) AS orderid from `orders` WHERE `name`="John"
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.