PhP / MySQL Stockage Recherches de l'utilisateur entre les pages afin que l'utilisateur peut-il y revenir

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

Question

J'écris une application php-mysql. L'application permet à l'utilisateur d'exécuter une recherche dans la base de données. Lorsque la recherche est exécutée, si l'utilisateur clique sur le bouton de retour pour y revenir après avoir examiné un point élevé par elle, on leur demande s'ils aimeraient renvoyer la requête (il utilise la poste). Qui relancer la recherche dans la base de données. L'utilisation get ne permettrait pas à la demande de rediffuser -. Mais il serait encore lancer la recherche à nouveau

Y at-il un moyen de stocker la recherche et le rappeler, avec des réexécution dans la base de données?

Cela peut être l'enregistrer dans la base de données, ou en quelque sorte dans le php - peut-être avec des sessions? Il peut y avoir beaucoup de données qui sortent de ces recherches, je me sens comme il est sans doute trop pour les sessions.

L'autre façon que je peux imaginer est de stocker dans la base de données, dans une table temporaire quelconque. Création de la table avec les colonnes que je compte interroger, puis en sélectionnant dans un insert. Puis en sélectionnant * de la table. Cela semble aussi un peu comme une mauvaise idée. Beaucoup de tables temporaires créées dynamiquement flottant autour.

Je sais que cela peut être fait. Les recherches enregistrées sont des choses que vous voyez dans de nombreuses applications Web. Alors, comment est-il fait généralement?

Était-ce utile?

La solution

Memcached

ou

APC

Cependant, je remarque que vous ne donnez aucune raison pourquoi vous voulez mettre en cache les résultats d'une recherche. « Parce qu'il est plus rapide, et je lis que cela rend mon application plus évolutive, » est la raison habituelle pour cela. Cela sent comme l'optimisation prématurée.

Je vous recommande de construire votre application et de profil il. Comment coûteux sont ces « recherches »? Pourquoi sont-ils coûteux? Est-ce une mauvaise conception de schéma? Est-ce l'indexation pauvres? Est-ce mauvais choix du moteur de stockage?

Vous vous rendez compte que MySQL dispose d'un cache de requête , non? Dans de nombreux cas, cela peut être tout ce dont vous avez besoin. Essayez d'exécuter un de vos requêtes coûteuses « de recherche » en utilisant le client mysql et notez le temps, puis exécutez à nouveau. Vous voyez?

Autres conseils

pour corriger l'erreur « voulez-vous soumettre à nouveau », vous pouvez enregistrer la demande dans la session ou dans la db, puis rediriger immédiatement vers une nouvelle page pour effectuer réellement la recherche:

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);
}

qui peuvent ensuite saisir les champs de requête de $ _SESSION [ 'search'] [22] ou db ...

que pour la sauvegarde des résultats, vous pouvez compter sur le cache du navigateur, ou vous pouvez stocker SERPs individuelle dans la session ou db ... qui expire en vieux à un moment donné, si nécessaire ...

créer une table de résultats est très bien (et accéléreraient des recherches complexes sur la pagination), mais vous pourriez potentiellement avoir des millions de visites là-bas, donc une mise en cache serait mise en page est de façon plus générale.

si l'utilisateur veut revenir aux jours de recherche ou quelques semaines plus tard, vous pouvez simplement relancer la recherche avec les champs de requête enregistrés.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top