0

我已经为此苦苦挣扎了一段时间,并搜索了各种资源(书籍/网络/本网站),但尚未找到解决方案。我已经很久没有使用 PHP / MySQL,所以我可能不知道相关的白话能够定位我的搜索。反正...

我有一个基本的订单管理系统。客户可以为他们想要测试的项目输入多行,每行都有要测试的项目,以及所需的测试套件。然后,我需要将这些项目中的每一项扩展到其组成测试中,以便测试实验室管理其工作流程。我需要能够将测试与订单项目和订单联系起来。

我有一个订单表,其中使用 order_id 字段(自动递增)和一些其他信息(谁下订单等)捕获了整个订单。然后,我使用订单表中的 order_id 和客户想要的每个项目/测试套件组合填充订单项目表,每个订单项目都有一个 order_item_id(自动递增)。

$sql1="INSERT INTO tbl_order(od_date, od_customer_id)
    SELECT ct_date, ct_customer_id 
    FROM tbl_cart
    WHERE ct_customer_id='$customerID' AND ct_session_id='$sid'";
mysql_query($sql1);
// get order_id
$orderid=mysql_insert_id();

// save order details to tbl_order_item
$sql2="INSERT INTO tbl_order_item(cat_code, pd_code, pd_description, pc_code, smpl_type, test_suite_name)
    SELECT cat_code, pd_code, pd_description, pc_code, smpl_type, test_suite_name 
    FROM tbl_cart
    WHERE ct_customer_id='$customerID' AND ct_session_id='$sid'";
mysql_query($sql2);

//  update date fields
$sql3="UPDATE tbl_order SET od_date='$date' WHERE ct_date='0000-00-00 00:00:00'";
$sql4="UPDATE tbl_order SET od_username='$username' WHERE od_username=''";
mysql_query($sql3);
mysql_query($sql4);

// set the order id in the order item and lab item tables
$sql5="UPDATE tbl_order_item SET od_id='$orderid' WHERE od_id='0'";

一切正常,但是当我尝试获取每个订单项目并将其扩展到其相关测试时,我现在卡住了。我创建了一个显示 test_suite / test_name 组合的表,但我无法将输出插入到 lab_item 表中。

//$sql6="UPDATE tbl_lab_item SET od_id='$orderid' WHERE od_id=''";
mysql_query($sql5);

// Expand Suite into tests in lab item table
$sql7="INSERT INTO tbl_lab_item(od_id,test_name)
    VALUES ('$orderid',(SELECT test_name FROM tbl_suite_select  WHERE tbl_order_item.test_suite_name=tbl_suite_select.test_suite_name))";
mysql_query($sql7);

我应该直接在数据库中执行此操作,还是应该先将数据提取到变量中?如果是这样,怎么做?

提前谢谢了。

更新 我现在已经解决了这个问题。感谢您的输入,如果有人感兴趣,这是最终解决它的查询。这一切都取决于在最终表的 Select 中调用正确的表/单元格。我错过了一个字段,所以它没有参考。

//  Insert individual tests into tbl_lab_item
$sql6="INSERT INTO tbl_lab_item(od_item_id, test_suite_name,test_name)
    SELECT tbl_order_item.od_item_id,tbl_order_item.test_suite_name,tbl_suite_select.test_name
    FROM tbl_order_item,tbl_suite_select
    WHERE tbl_order_item.test_suite_name=tbl_suite_select.test_suite_name";
mysql_query($sql6);
4

2 回答 2

1

我不确定我是否完全理解这个问题,但这里有一些改进的查询(使用 pdo)。我认为我添加的要点是最后一个查询中的 join 语句。我还结合了您以前的一些查询以一次性添加行(而不是插入而不是更新)。我没有测试任何东西。

$sqlStmt = $pdo->prepare("
    INSERT INTO tbl_order
    (   od_date
    ,   od_customer_id
    ,   od_date
    ,   od_username)
    SELECT
        ct_date
    ,   ct_customer_id
    ,   ? AS od_date
    ,   ? AS od_username
    FROM tbl_cart
    WHERE ct_customer_id = ?
    AND ct_session_id = ?
");

$sqlStmt->execute(array(
    $date,
    $username,
    $customerID,
    $sid
));

$orderid = $pdo->lastInsertId();

$sqlStmt = $pdo->prepare("
    INSERT INTO tbl_order_item
    (   cat_code
    ,   pd_code
    ,   pd_description
    ,   pc_code
    ,   smpl_type
    ,   test_suite_name
    ,   od_id)
    SELECT 
        cat_code
    ,   pd_code
    ,   pd_description
    ,   pc_code
    ,   smpl_type
    ,   test_suite_name 
    ,   ? AS od_id
    FROM tbl_cart
    WHERE ct_customer_id = ?
    AND ct_session_id = ?
");
$sqlStmt->execute(array(
    $orderid,
    $customerID,
    $sid
));

$sqlStmt = $pdo->prepare("
    INSERT INTO tbl_lab_item
    (   od_id
    ,   test_name)
    SELECT
        ? AS od_id
    ,   tss.test_name
    FROM tbl_suite_select tss
    INNER JOIN tbl_order_item toi
    ON toi.test_suite_name = tss.test_suite_name
    WHERE toi.od_id = ?
");
$sqlStmt->execute(array(
    $orderid,
    $orderid
)); 
于 2013-01-16T16:47:23.977 回答
0

这应该将您的代码转换为工作代码:

$sql7="INSERT INTO tbl_lab_item(od_id,test_name)
       SELECT '$orderid', test_name FROM tbl_suite_select 
       WHERE tbl_order_item.test_suite_name=tbl_suite_select.test_suite_name";

不过,我不太明白适用于 where 的条件是否足够。

于 2013-01-16T16:38:40.353 回答