2012-03-20 3 views
0

5MB가 넘는 CSV 파일이 있습니다. 이와 같은 예로서,PHP CSV 파일을 통해 검색

id,song,album,track 
200,"Best of 10","Best of 10","No where" 
230,"Best of 10","Best of 10","Love" 
4340,"Best of 10","Best of 10","Al Road" 

나는 많은 레코드를 가지고 있습니다. 나는 한 번에 하나의 기록을 얻어야한다. 내 주요 질문은 우리가 mysql 테이블에서 쿼리하는 것처럼 CSV에서 정확한 데이터 레코드를 얻을 수있는 방법이 있는지입니다.

그 외에도 다음과 같은 해결책을 가지고 있습니다. 가장 좋은 방법은 무엇일까요?

  1. CSV를 읽고 배열에로드하십시오. 그런 다음 물마루를 검색하고 데이터를 가져옵니다. (모든 기록을 가져와야하는데 순서가 다르기 때문에이 문제에 직면하게됩니다. 다른 정보는 레코드별로 기록 될 수 있습니다.)
  2. CSV를 MYSQL 데이터베이스로 내보내기 한 다음 해당 테이블에서 쿼리
  3. CSV 전체 읽기 배열에로드하지 않은 시간

빠른 방법으로 CSV 파일을 검색 할 수 있다면 좋을 것입니다. 당신의 제안을 감사하십시오.

감사합니다.

+0

[PHP에서 csv 파일에서 데이터를 추출하는 방법] 가능한 복제본 (http://stackoverflow.com/questions/2805427/how-to-extract-data-from-csv- file-in-php) – Gordon

+0

(대형) CSV 파일을 구문 분석하는 방법은 전에 여러 번 묻고 답했습니다. 나는 IF를 사용하는 방법을 알기 때문에 여기서 진짜 질문을 보지 못한다. – Gordon

+0

@Gordon. 내 질문 CSV 파일에서 데이터를 추출하는 방법이 아닙니다. 벌써 했어. 그러나 5MB 파일을로드 할 때마다 항상 한 레코드 만 얻습니다. 정확한 레코드로 이동하여 파일을 항상로드하지 않고도 얻을 수있는 방법이 있는지 묻습니다. –

답변

1

CSV 파일을 직접 쿼리 할 수있는 라이브러리가 있는지 알지 못합니다. 있다면, 그게 최선의 방법이 될거야. 그렇지 않은 경우 여기에 또 다른 해결책이 있습니다.

id 8999의 세부 정보를 보려면 전체 파일을로드하는 것이 매우 비효율적입니다.

당신은 쉼표에 fgets, explode를 사용하여 라인이

읽기 그런 짓을하고 0 번째 요소를 확인할 수 있습니다. 원하는 ID가 아닌 경우 폐기하고 반복하십시오.

+0

단지 fgets와 explode가이 경우 다소 뭉툭한 도구 일뿐입니다. – Gordon

+0

글쎄, 그는'fgetcsv'를 사용할 수는 있지만 그 두 가지를 조합 한 것으로 느껴집니다. – xbonez

+0

fgetcsv는 csv 행을보다 잘 제어하므로 더 명확합니다. – Gordon

0

PHP에 익숙하지 않지만이 쿼리가 자주 발생하는 경우 데이터를 메모리에 유지하고 매핑 데이터 구조를 사용하여 ID로 인덱싱하는 것이 좋습니다. (또한 PHP의 배열이어야합니다)

+0

공유 메모리 세그먼트 나 세마포어를 사용하지 않는 한 PHP 스크립트는 요청을 처리하므로 데이터를 보관할 수 없습니다. – Gordon