2010-06-23 13 views
6

C'è un modo per impostare il completamento automatico in PHP/jQuery che può eseguire rapidamente migliaia di righe in un database?Come si usa il completamento automatico per migliaia di voci?

Ho una bacheca di lavoro in cui l'utente entra nel suo college - e voglio offrire il completamento automatico. Il problema è che ci sono 4.500 college negli Stati Uniti e sembra una soluzione orribile.

C'è un buon modo per rendere veloce la query e restituire i risultati solo quando sono disponibili meno di 10 opzioni?

Grazie in anticipo, Walker

+1

basta usare un limite alla query SQL. Non vedo alcun motivo per visualizzare più di circa 10 possibili risultati. 4.500 righe in realtà non è un numero così grande nei termini del database. –

+1

Come ha detto Byron, limita i risultati della query. 4500 non è molto –

+0

Pensavo che LIMIT fosse per specificare gli intervalli nel database? Come si applica a questo problema (mi dispiace per la domanda del principiante). – Walker

risposta

5

Sono d'accordo con Anax. Si consiglia di guardare una soluzione semplice come il nuovo jQuery UI Autocomplete field.

Utilizzando le opzioni di ritardo e minLength, è possibile impedire allo script di interrogare il server fino a quando l'utente non ha immesso tre caratteri, il che ridurrebbe il numero di risultati.

PS. C'è anche un'opzione di memorizzazione nella cache che può essere utile. È possibile memorizzare nella cache l'intero elenco lato client diminuendo le chiamate al database.

+0

+ 1 Il nuovo completamento automatico dell'interfaccia utente jQuery è il migliore. – Keyo

3

La cosa migliore è quella di utilizzare AJAX, dato il numero di record. Fondamentalmente, è necessario monitorare i tasti e chiamare uno script PHP, che a sua volta recupererà i record rilevanti dal database.

Un buon esempio potrebbe essere lo dhtmlxCombo.

+2

È più intelligente di interrogare tutti i risultati e archiviarli in un array? Sta interrogando il database ogni volta che una lettera viene premuta meno intensiva/veloce? – Walker

+0

Credo di si. Ho già implementato la casella combinata jQuery in un progetto e sto tracciando i risultati da una tabella lunga 10k + records. Non oserei prendere tutti i record e una volta e far scaricare agli utenti un enorme documento html. – Anax

2

Si potrebbero prima chiedere altri qualificatori come "regione desiderata/stato", "specialità", ecc. E quindi iniziare il completamento automatico dopo che l'utente ha inserito 6 o più caratteri per filtrare più dei 4.500 college?

+0

Ho votato questo a causa del futuro a prova del concetto di auto-completamento. Man mano che il set di dati si espande, vorrai adottare misure per personalizzare i suggerimenti per l'utente dell'app. Questo è qualcosa che facciamo tramite la geo-localizzazione, i dati del profilo utente e la cronologia delle ricerche. – Markus

0

4500 non è troppo, a seconda dell'hardware/numero di utenti/quanto spesso si realmente bisogno, si potrebbe tenere l'elenco in memoria (MySQL Memory engine come esempio).
Ma, come già suggerito, quando si ottengono risultati solo quando ci sono 3 lettere + si potrebbe anche non avere alcun problema.

+0

eccetto per il fatto che probabilmente più della metà degli studenti negli Stati Uniti, ad esempio, frequenta college chiamati "Università di [Nome dello Stato]" – corprew

+0

Se ci sono molti risultati che iniziano con lo stesso nome, la registrazione e l'hardcoding alcune cose potrebbero essere una soluzione (se la ricerca fa parte di uni * return "University of" e fare una ricerca vera solo se ci sono alcuni dati valutabili, qualcosa del genere) --- e, a seconda di come le persone stanno usando il modulo, mantenendo l'ultimo i risultati in memoria potrebbero essere di aiuto (APC). Controllando i log se è utile ancora una volta per caso .. – Kuchen

+0

Grazie per l'intuizione, lo apprezzo. – Walker

Problemi correlati