我已经为此苦苦挣扎了一段时间,并搜索了各种资源(书籍/网络/本网站),但尚未找到解决方案。我已经很久没有使用 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);