2010-06-23 2 views
6

데이터베이스의 수천 행을 빠르게 실행할 수있는 PHP/jQuery에서 자동 완성을 설정하는 방법이 있습니까?수천 개의 항목에 대해 자동 완성을 어떻게 사용합니까?

나는 사용자가 대학을 입력하는 취업 게시판을 가지고 있으며 자동 완성 기능을 제공하려고합니다. 문제는 미국에 4,500 개의 단과 대학이 있으며 끔찍한 해결책이라고 생각됩니다.

쿼리를 빠르게 수행하고 10 개 미만의 옵션을 사용할 수있는 경우에만 결과를 반환하는 좋은 방법이 있습니까?

+1

SQL 쿼리에서 LIMIT을 사용하면됩니다. 약 10 가지 이상의 결과를 표시 할 이유가 없습니다. 실제로 4,500 개의 행은 데이터베이스 측면에서 그렇게 큰 숫자는 아닙니다. –

+1

Byron이 말했듯이 쿼리 결과를 제한하십시오. 4500은 많지 않다 –

+0

나는 LIMIT가 데이터베이스의 범위를 지정하기위한 것이라고 생각 했는가? 그게이 문제에 어떻게 적용 되는가? (초보자 질문에 대해 유감스럽게 생각한다.) – Walker

답변

5

나는 Anax에 동의합니다. 새로운 jQuery UI Autocomplete field과 같은 간단한 솔루션을 살펴볼 수 있습니다.

delay 및 minLength 옵션을 사용하면 사용자가 3자를 입력 할 때까지 스크립트에서 서버를 쿼리하지 않게 할 수 있으므로 결과 수가 줄어 듭니다.

추신. 또한 유용 할 수도있는 캐싱 옵션이 있습니다. 데이터베이스에 대한 호출을 줄이는 클라이언트 쪽 전체 목록을 캐시 할 수 있습니다.

+0

+1 새로운 jQuery UI 자동 완성이 최고입니다. – Keyo

3

가장 좋은 방법은 레코드 수 주어진 AJAX를 사용하는 것입니다, 사전에 워커를 주셔서 감사합니다. 기본적으로 키 스트로크를 모니터링하고 PHP 스크립트를 호출해야합니다. 그러면 PHP 스크립트가 데이터베이스에서 관련 레코드를 가져옵니다.

좋은 예가 dhtmlxCombo입니다.

+2

모든 결과를 쿼리하고 배열에 저장하는 것보다 더 똑똑한가요? 글자를 덜 집중적으로/빠르게 눌러 질 때마다 데이터베이스를 쿼리하고 있습니까? – Walker

+0

나는 그렇게 믿는다. 이미 프로젝트에서 jQuery 콤보 상자를 구현했으며 10k + 레코드 긴 테이블의 결과를 가져 왔습니다. 나는 모든 레코드를 한 번 가져 와서 사용자가 거대한 html 문서를 다운로드하게하지 않을 것입니다. – Anax

2

먼저 '원하는 지역/주', '전문 분야'등의 다른 한정자를 요청한 다음 사용자가 6 자 이상의 문자를 입력 한 후 자동 완성을 시작하여 4,500 개 이상의 대학을 필터링 할 수 있습니까?

+0

나는 자동 완성이라는 개념을 미래를 보장하기 위해 투표했습니다. 데이터 세트가 확장됨에 따라 앱 사용자에게 제안 사항을 맞춤 설정할 수있는 조치를 취해야합니다. 이것은 지리적 위치, 사용자 프로필 데이터 및 검색 기록을 통해 수행하는 작업입니다. – Markus

0

4500은 하드웨어/사용자 수에 따라 너무 많지 않으므로 실제로는이 필요합니다. 목록을 메모리에 유지할 수 있습니다 (MySQL Memory engine 예).
그러나 이미 제안했듯이 3 글자 +가있을 때만 결과를 얻으면 전혀 문제가 없을 수도 있습니다.

+0

예를 들어 미국의 학생 중 절반 이상이 '[State Name] 대학'이라고 불리는 대학에 다니는 것을 제외하고는 – corprew

+0

같은 이름으로 시작하는 결과가 많으면 로깅 및 하드 코딩 할 수 있습니다 해결책이 될 수 있습니다 (검색이 uni * return "University of"의 일부이고 평가 가능한 데이터가있는 경우에만 실제 검색을 수행하십시오) --- 그리고 사람들이 양식을 사용하는 방식에 따라 마지막 결과가 메모리에 도움이 될 수도 있습니다 (APC). 유용한 경우마다 로그를 확인하십시오. – Kuchen

+0

통찰력을 주셔서 감사합니다. 감사드립니다. – Walker

관련 문제