皆様のご意見をお寄せいただきありがとうございます。peterm のガイダンスは、データをインポートするのに役立ちました。Rahul さん、私はこのタスクに PHP を使用したのではなく、HeidiSQL を使用してテーブルにデータを取り込もうとしていたことを言及すべきでした。user4035 が詳細を尋ねたので、それもここにあります。
データベースに 3 つのテーブルがあります。
- tbl_status には、status_ID (AUTO_INCREMENT) と status_name の 2 つのフィールドがあります。
- tbl_contracts には、contract_ID (AUTO_INCREMENT) と contract_no (文字列) の 2 つの列があります。
- 最後のテーブル (tbl_searches) は、ユーザーのアクションが記録されるアクティブな (?) テーブルになります。
これらのテーブルの最初の 2 つには、簡単にデータが取り込まれました。tbl_status には、契約のステータスを説明する 11 行があり、これらは Excel スプレッドシートに入力され、HeidiSQL を介して CSV 経由でインポートされました。
2 番目のテーブルでは、インポートする「契約」が 1,000 件以上あったため、Excel の最初の列を空白のままにし、契約の文字列を含む 2 番目の列を同じ方法でインポートしました。
3 番目のテーブルには、search_id (AUTO_INCREMENT)、contract_id、contract_no、status_id、notes、initials、search_date の 7 つのフィールドがあります (これは今まで忘れていました)。
検索情報を含むスプレッドシートを tbl_searches に挿入したかったのです。これには contract_no がありますが、contract_id はありません。行を挿入し、クエリで tbl_contracts から contract_id を取得する必要がありました。エラーや予期しない結果が発生することなく、正しく処理するのに少し時間がかかりました。(次のクエリでは、search_date が必要ありません。)
LOAD DATA LOCAL INFILE '\\\\PATH\\PATH\\PATH\\PATH\\FILENAME.csv'
INTO TABLE `hoa_work`.`tbl_searches`
FIELDS TERMINATED BY ',' OPTIONALLY ENCLOSED BY '"' ESCAPED BY '"' LINES TERMINATED BY '\r\n'
IGNORE 1 LINES --because the first row of the CSV has column headers
(@search_id, @contract_id, @contract_no, @status_id, @notes, @initials)
SET
search_id = NULL, --is an AUTO_INCREMENT field
contract_id = (SELECT contract_id
FROM tbl_contracts
WHERE contract_no = @contract_no
LIMIT 1),
contract_no = @contract_no,
status_id = @status_id,
notes = @notes,
initials = @initials;
/* Affected rows: 1,011 Found rows: 0 Warnings: 0 Duration for 1 query: 0.406 sec. */
ここで、@blah がユーザー変数であることを学びました。次のクエリを実行すると、変数がどのように定義されているかがわかります。CSV ファイルから 1,000 行以上を挿入していたので、挿入された最後の行の答えが得られました。
SELECT @contract_no
私が最終的にクエリを書いた方法について提案された改善点があれば、教えてください。
-マット