PHP / MySQL Memorizzazione di ricerche degli utenti tra le pagine in modo che l'utente può tornare a loro

StackOverflow https://stackoverflow.com/questions/2125977

Domanda

Sto scrivendo un'applicazione php-mysql. L'applicazione permette all'utente di eseguire una ricerca sul database. Al termine della ricerca viene eseguito, se l'utente fa clic sul pulsante Indietro per tornare ad essa dopo l'esame di una voce allevato da esso, viene chiesto se vorrebbero inviare nuovamente la query (che utilizza post). Il che eseguire nuovamente la ricerca nel database. Utilizzando ottiene non comporterebbe la richiesta di ripubblicare -. Ma sarebbe comunque eseguire la ricerca di nuovo

C'è un modo per memorizzare la ricerca e richiamarlo, con fuori eseguire nuovamente nel database?

Questo può essere il risparmio nel database, o in qualche modo in php - magari con sessioni? Non ci può essere un sacco di dati provenienti da queste ricerche, mi sento come se fosse probabilmente troppo per le sessioni.

L'altro modo posso immaginare è quello di memorizzare nel database, in una tabella temporanea di qualche tipo. Creazione della tabella con le colonne ho intenzione di interrogare, quindi selezionando in un inserto. Quindi selezionando * dalla tabella. Questo sembra anche un po 'come una cattiva idea. Un sacco di tabelle temporanee create dinamicamente galleggiano intorno.

So che questo può essere fatto. Le ricerche salvate sono cose che si vedono in molte applicazioni web. Così come è generalmente fatto?

È stato utile?

Soluzione

memcached

o

APC

Tuttavia, ho notato che non stai dando alcuna ragione perché si desidera memorizzare nella cache i risultati di una ricerca. "Perché è più veloce, e ho letto che rende la mia applicazione più scalabili," è il solito motivo per questo. Questo odora di ottimizzazione prematura.

Vi consiglio si genera l'applicazione e il profilo it. Come costosi sono queste "ricerche"? Perché sono coloro costose? E 'cattiva progettazione dello schema? È povero indicizzazione? È povera scelta di motore di archiviazione?

Ti rendi conto che MySQL ha un href="http://dev.mysql.com/doc/refman/5.1/en/query-cache.html" rel="nofollow noreferrer"> cache delle query , giusto? In molti casi questo può essere tutto ciò che serve. Provare a eseguire una delle tue "ricerca" costose query utilizzando il client mysql e prendere nota del tempo, quindi eseguirlo di nuovo. Vedi?

Altri suggerimenti

per correggere l'errore "vuoi ri-presentare", è possibile memorizzare la richiesta nella sessione o nel db, quindi reindirizzare immediatamente a una nuova pagina per eseguire effettivamente la ricerca:

search.php?searchId=22

if (isset($_GET['searchId'])) {
  $search = $_SESSION['search'][$_GET['searchId'];
  // do search
} elseif (isset($_POST['search'])) {
  $_SESSION['search'][] = $_POST;
  header('Location: search.php?searchId=' . (count($_SESSION['search']) - 1);
}

che possono poi afferrare i campi di query da $ _SESSION [ 'ricerca'] [22] o il db ...

Per quanto riguarda il salvataggio dei risultati, si può fare affidamento sulla cache del browser, oppure è possibile memorizzare SERP individuale nella sessione o db ... in scadenza fuori quelle vecchie a un certo punto, se necessario ...

creando una tabella dei risultati va bene (e sarebbe velocizzare l'impaginazione su ricerche complesse), ma si potrebbe avere milioni di visite in là, in modo da un'impaginazione con caching sarebbe modo più generale.

Se l'utente vuole tornare ai giorni di ricerca o settimane più tardi, si può semplicemente eseguire nuovamente la ricerca con i campi di query salvate.

scroll top