繁体   English   中英

如何遍历INSERT INTO语句

[英]How do I loop through an INSERT INTO statement

我遇到的问题是在while语句的每个循环期间触发INSERT INTO Mysql语句。

它根据echo传正确次数的echo正确循环,但是INSERT INTO仅工作1次。

基本上,问题是:“如何使用PHP或SQL语句遍历此SQL INSERT statement语句”

提前致谢

编辑:作为一个绝对的甜甜圈,我没有意识到我已经为orderID设置了主键,一直在工作。 只是不允许重复orderID。

谢谢您的帮助

<?php
if(isset($_GET['checkout']))
{
$sql="SELECT * FROM cart WHERE userID =".$_SESSION['user'];
$query= mysqli_query($conn,$sql);
while ($row = mysqli_fetch_array($query)) {
            $querys= "INSERT INTO `orderdetail`(`orderID`, `selectionID`) VALUES (LAST_INSERT_ID(),{$row['cardchoiceID']})";
              $performit = $conn->query($querys);
                echo("testing");
            }
}
?>

您可以通过从select语句插入(将其称为从一个表到另一个表的“迁移”)来优化方法:

"INSERT INTO orderdetail(selectionID, orderID)
  SELECT selectionID,orderID FROM cart WHERE userID =".$_SESSION['user'];

参考: Mysql Doc

Ka_lin的回答很好,但是您的订单没有存储用户/购物车详细信息? 我没有看到他们之间的关系

通常,购物车的流量为

  1. 用户向购物车中添加一些商品(购物车有ID)
  2. 用户结帐和购物车成为订单(使用购物车中的商品生成订单ID)

    insert into orders(cart_id,item_id,item_qty,item_price,create_datetime) select cart_id,item_id,item_qty,item_price,now() from carts;

  3. 然后更新cart_status以将该购物车标记为“完成”,以确保我们在该用户返回时创建新的购物车

    update carts set cart_status = 'ordered' where user_id = {$user_id};

  4. 继续处理订单!

===============

看到OP评论后进行编辑

也许这种方式对你有用

  1. 拥有一个order_header (存储常规信息,例如order_type,地址,时间戳和用户)和order_detail (存储项目/产品相关信息)表
  2. 将购物车信息插入order_header以生成order_id
  3. order_header获取order_id,并从order_headerselect order_id from order_header where user = {$user_id} and status = 'new'
  4. 插入项目/产品细节成order_detailinsert into order_detail (order_id,some columns here...) select ('{$order_id}',some columns here...) from carts where user = {$user_id};
  5. 然后将cart_status更新为“有序”-就是这样!

已将orderID设置为主键。 不能重复

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM