私はCSVファイルをデータベースにインポートする作業を行っていますが、これは複数のステップからなるプロセスです。
手順は次のとおりです。
- ステップ1:ユーザーがCSVファイルをアップロードします。
- ステップ2:ユーザーはデータをデータ型に関連付けます。たとえば、CSVのレコードに次のデータが含まれている場合
John,Doe,jondoe@gmailcom
、ユーザーはドロップダウンボックスから名を選択してデータ値Johnに関連付け、姓をデータ値Doeに関連付けるドロップダウンボックスから選択し、メールアドレスをドロップダウンから選択します。データ値johndoe@gmail.comに関連付けるボックス - ステップ3:データベースにデータを挿入する
私の質問は次のとおりです。
1. /ステップ3では、ユーザーが選択した列と元のデータを所有します。
元のデータは次のようになります。
$data = array(
0 => array('John','Doe','johndoe@gmail.com'),
1 => array('Foo','Bar','foobar@gmail.com')
);
ステップ2で選択した列は次のようになります。
$columns = array('firstname','lastname','emailaddress')
次のようなSQLクエリを作成するにはどうすればよいですか。
INSERT into contacts (id,firstname,lastname,emailaddress) values (null,'John','Doe','johndoe@gmailcom')
ご覧のとおり、SQLクエリには、配列内にある順序で選択された列があり、その後に値が続きます。列はデータの順序で選択されているので、データは正しい順序であり、その位置の特定の列に関連付けられていると推測できます(たとえば、データ値は ' John'はcolumns配列の最初の位置に関連付けられており、その逆も同様です)。
2. /ユーザーがファイルの最初のアップロードを行うときに、最初のレコードに空白のフィールドがあるcsvファイルを送信する可能性があるというシナリオを考えていました。問題は、csvレコード内の列の数に基づいて、ユーザーがデータに関連付ける列の数を決定することです。この場合、2つの列があり、後続のすべてのレコードには3つの列があります。さて、正しい列数を決定するためにレコードのセット全体をループするつもりはありません。この問題を解決するにはどうすればよいですか?何か案は?
編集
質問2の答えがわかったと思います。csvファイルの解析で、各レコードのカウントを取得できます。解析の最後の最大カウントは私のカウントです。正しいようですか?それに関する問題はありますか?