[英]MySQL insert into with subquery Select
Basically, I'd like to insert into table, getting values id from the same table,something like this 基本上,我想插入表中,从同一个表中获取值id,就像这样
$sql = ("INSERT INTO commande (idfichecmd,idproduit,idclt,qte,datecmd)
(SELECT MAX(idfichecmd)+1 ,'1' AS idproduit ,'$idC' AS idclt ,'$fb' AS qte,'$date' FROM commande),
(SELECT MAX(idfichecmd) ,'2' AS idproduit ,'$idC' AS idclt ,'$g' AS qte,'$date' FROM commande),
(SELECT MAX(idfichecmd) ,'3' AS idproduit ,'$idC' AS idclt ,'$pi' AS qte,'$date' FROM commande),
(SELECT MAX(idfichecmd) ,'4' AS idproduit ,'$idC' AS idclt ,'$ft' AS qte,'$date' FROM commande),
(SELECT MAX(idfichecmd) ,'5' AS idproduit ,'$idC' AS idclt ,'$sd' AS qte,'$date' FROM commande),
(SELECT MAX(idfichecmd) ,'6' AS idproduit ,'$idC' AS idclt ,'$ad' AS qte,'$date' FROM commande),
(SELECT MAX(idfichecmd) ,'7' AS idproduit ,'$idC' AS idclt ,'$vs' AS qte,'$date' FROM commande),
(SELECT MAX(idfichecmd) ,'8' AS idproduit ,'$idC' AS idclt ,'$wi' AS qte,'$date' FROM commande),
(SELECT MAX(idfichecmd) ,'9' AS idproduit ,'$idC' AS idclt ,'$equip' AS qte,'$date' FROM commande),
(SELECT MAX(idfichecmd) ,'10' AS idproduit ,'$idC' AS idclt ,'$fo' AS qte,'$date' FROM commande),
(SELECT MAX(idfichecmd) ,'11' AS idproduit ,'$idC' AS idclt ,'$fh' AS qte,'$date' FROM commande)")or die(mysql_error());
$result = mysql_query($sql) or die("Unable to add commande : ". mysql_error());
mysql_close();
owever, this one does not work, anyone know why? 但是,这一项不起作用,有人知道为什么吗?
You could use UNION
: 您可以使用UNION
:
INSERT INTO commande (idfichecmd, idproduit, idclt, qte, datecmd)
SELECT MAX(idfichecmd)+1, 1, '$idC', '$fb' , '$date' FROM commande
UNION ALL
SELECT MAX(idfichecmd) , 2, '$idC', '$g' , '$date' FROM commande
UNION ALL
SELECT MAX(idfichecmd) , 3, '$idC', '$pi' , '$date' FROM commande
UNION ALL
SELECT MAX(idfichecmd) , 4, '$idC', '$ft' , '$date' FROM commande
UNION ALL
SELECT MAX(idfichecmd) , 5, '$idC', '$sd' , '$date' FROM commande
UNION ALL
SELECT MAX(idfichecmd) , 6, '$idC', '$ad' , '$date' FROM commande
UNION ALL
SELECT MAX(idfichecmd) , 7, '$idC', '$vs' , '$date' FROM commande
UNION ALL
SELECT MAX(idfichecmd) , 8, '$idC', '$wi' , '$date' FROM commande
UNION ALL
SELECT MAX(idfichecmd) , 9, '$idC', '$equip', '$date' FROM commande
UNION ALL
SELECT MAX(idfichecmd) , 10, '$idC', '$fo' , '$date' FROM commande
UNION ALL
SELECT MAX(idfichecmd) , 11, '$idC', '$fh' , '$date' FROM commande
But it might be easier to first obtain the MAX(idfichecmd)
in PHP, then use INSERT ... VALUES
(remembering to perform the operation in a transaction in order to preserve atomicity): 但是,首先在PHP中获取MAX(idfichecmd)
,然后使用INSERT ... VALUES
(记住要在事务中执行操作以保持原子性)可能会更容易:
INSERT INTO commande (idfichecmd, idproduit, idclut, qte, datecmd) VALUES
($id+1, 1, '$idC', '$fb', '$date'),
($id , 2, '$idC', '$g' , '$date'),
-- etc.
Or, if you are merely looking to give each new record an incremented idfichecmd
, consider making the column AUTO_INCREMENT
(whereby MySQL will do all of this for you automatically): 或者,如果您只是希望为每个新记录idfichecmd
一个递增的idfichecmd
,请考虑将列idfichecmd
AUTO_INCREMENT
(这样MySQL将自动为您完成所有这些操作):
ALTER TABLE commande MODIFY idfichecmd INT AUTO_INCREMENT;
INSERT INTO commande (idproduit, idclut, qte, datecmd) VALUES
(1, '$idC', '$fb', '$date'),
(2, '$idC', '$g' , '$date'),
-- etc.
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.