我一直在努力解决这个问题,并且已经搜索了各种来源(书籍/网站/本网站)但尚未找到解决方案。我没有长时间使用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 for the final table中调用正确的表/单元格。我错过了一个字段,所以它没有参考。
// 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);
答案 0 :(得分: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
));
答案 1 :(得分: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";
我不太清楚条件是否适用于哪里就足够了。