私はしばらくこれに苦労しており、さまざまな情報源 (書籍 / Web / このサイト) を検索しましたが、まだ解決策が見つかりません. 私はそれほど長い間 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);
これをデータベースに対して直接実行する必要がありますか、それとも最初にデータを変数に引き出す必要がありますか? もしそうなら、どのように?
よろしくお願いします。
更新 私は今問題を解決しました。ご意見ありがとうございます。興味のある方は、これが最終的に解決したクエリです。それはすべて、最後のテーブルの選択で正しいテーブル/セルを呼び出すことにかかっていました。フィールドが欠落していたため、参照がありませんでした。
// 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);