CSV 파일을 데이터베이스로 가져 오는 작업을하고 있으며 여러 단계로 진행됩니다.PHP CSV 가져 오기 질문
- 1 단계 : 사용자가 CSV 파일을 업로드
은 다음 단계입니다.
- 2 단계 : 사용자가 데이터를 데이터 형식에 연결합니다. 예를 들어, CSV의 레코드에
John,Doe,[email protected]
데이터가 포함되어있는 경우 사용자는 드롭 다운 상자에서 firstname을 선택하여 데이터 값 John에 연결하는 드롭 다운 상자의 성을 데이터 값 Doe에 연결하고 전자 메일 주소를 드롭 다운 상자가 데이터 값 [email protected]에 동료 - 3 단계 : 데이터베이스에 데이터를 삽입이
내 질문은 다음과 같습니다
1/3 단계에, 나는에있는 것 내 소유물은 사용자가 선택한 컬럼과 원본 데이터입니다.
$data = array(
0 => array('John','Doe','[email protected]'),
1 => array('Foo','Bar','[email protected]')
);
그리고 여기에 무엇을 내 열을 2 단계에서 선택하는 모양입니다 :
$columns = array('firstname','lastname','emailaddress')
가 어떻게 할 수있는 SQL 쿼리를 만들려면 어떻게해야합니까 여기
는 원본 데이터가 모습입니다INSERT into contacts (id,firstname,lastname,emailaddress) values (null,'John','Doe','[email protected]')
당신이 볼 수 있듯이 : 다음은 등 , sql 쿼리에는 배열 내에있는 순서대로 선택한 열이 있고 그 다음에 값이 있습니다. 열 순서대로 데이터를 선택했기 때문에 데이터가 올바른 순서로 있고 해당 위치의 특정 열과 연결되어 있다고 가정 할 수 있습니다 (예를 들어 데이터 값 ' John '은 columns 배열의 첫 번째 위치와 연관되어 있으며, 그 반대도 마찬가지입니다.
2./나는 사용자가 파일의 초기 업로드를 할 때 잠재적으로 빈 필드가있는 첫 번째 레코드가 포함 된 csv 파일을 보낼 수 있다고 생각했습니다. 문제는 사용자가 csv 레코드 내의 열 수를 기반으로 데이터에 연결할 열의 수를 결정하는 것입니다. 이 경우 두 개의 열이 있고 모든 후속 레코드에는 세 개의 열이 있습니다. 글쎄, 정확한 열 개수를 결정하기 위해 전체 레코드 집합을 반복하지 않을 것입니다. 이 문제를 어떻게 해결합니까? 어떤 아이디어?
편집
내가 CSV 파일의 구문 분석에 2 질문에 대한 답을 알아 낸 생각, 나는 각 레코드와 구문 분석의 마지막에 가장 높은 수의 수를 얻을 수있는 것은 내 수입니다. 그래? 그게 어떤 문제 야?
두 번째 질문에 대해서는 언급하지 않았지만 해결 방법은 나와 함께 갈 것입니다. 가짜 코드 : if numFieldsCurrLine> maxFieldsSeen then maxFieldsSeen = numFieldsCurrLine; –