PHP / MySQL Speicher von Benutzern Sucht zwischen Seiten so dass der Benutzer Zurück zu Them

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

Frage

Ich schreibe eine PHP-MySQL-Anwendung. Die Anwendung ermöglicht es dem Benutzer, eine Suche gegen die Datenbank auszuführen. Wenn die Suche ausgeführt wird, wenn der Benutzer klickt auf die Schaltfläche Zurück, um es zurück zu gehen, nachdem ein Element der Prüfung durch sie erzogen, werden sie gefragt, ob sie die Anfrage senden möchte (es Post verwendet). Die die Suche in der Datenbank erneut ausführen würde. GET würde in der Anfrage zu repost nicht dazu führen, -. aber es wäre immer noch die Suche erneut ausführen

Gibt es eine Möglichkeit, die Suche zu speichern und wieder aufrufen, mit ihm in der Datenbank heraus erneut ausführen?

Dies kann es in der Datenbank gespart werden, oder irgendwie in der PHP - vielleicht mit Sitzungen? Es kann eine Menge Daten kommen aus diesen Recherchen, ich fühle mich wie es für Sitzungen wahrscheinlich zu viel.

Die andere Art und Weise kann ich mich vorstellen, es zu speichern, in der Datenbank, in einer temporären Tabelle in irgendeiner Form. Erstellen der Tabelle mit den Spalten I Abfrage beabsichtigen, dann in einen Einsatz auswählen. Dann die Auswahl * aus der Tabelle. Dies scheint auch eher wie eine schlechte Idee. Viele dynamisch erstellte temporäre Tabellen im Umlauf.

Ich weiß, dass dies getan werden kann. Gespeicherte Suchanfragen sind Dinge, die man in vielen Web-Anwendungen. Also, wie ist es in der Regel getan?

War es hilfreich?

Lösung

Memcached

oder

APC

Allerdings merke ich, dass Sie keinen Grund zu geben Warum Sie wollen die Ergebnisse einer Suche zwischenzuspeichern. „Weil es schneller, und ich lese, dass es meine App besser skalierbar macht“, ist der üblicher Grund dafür. Das riecht wie vorzeitige Optimierung.

Ich empfehle Ihnen, Ihre Anwendung zu erstellen und es profilieren. Wie teuer sind diese „Suche“? Warum sind sie teuer? Ist es schlecht Schema-Design? Ist es eine schlechte Indizierung? Ist es schlechte Wahl der Speicher-Engine?

Sie tun erkennen, dass MySQL hat eine Abfrage-Cache , nicht wahr? In vielen Fällen kann dies alles, was Sie brauchen. Versuchen Sie eine Ihrer teuren läuft „Suche“ Abfragen mit dem MySQL-Client und notieren Sie die Zeit, dann führen Sie es erneut. Siehst du?

Andere Tipps

beheben die „mögen Sie erneut einreichen“ Fehler, können Sie die Anfrage in der Sitzung speichern oder in der db, dann sofort auf eine neue Seite umgeleitet, um tatsächlich die Suche durch:

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

, die dann die Abfragefelder von $ greifen _SESSION [ 'Suche'] [22] oder die db ...

wie für die Ergebnisse zu speichern, können Sie sich auf den Cache des Browsers verlassen, oder Sie können in der Sitzung oder db einzelne SERPs speichern ... alte irgendwann ablaufen, wenn nötig ...

eine Ergebnistabelle zu schaffen ist in Ordnung (und würde Paginierung auf komplexe Suchvorgänge beschleunigen), aber Sie könnten möglicherweise Millionen von Treffern in dort haben, so dass eine Paginierung mit Caching allgemeinere Art und Weise sein würde.

Wenn der Benutzer möchte später auf die Suche Tage oder Wochen zurückkehren, können Sie nur die Suche mit den gespeicherten Abfragefelder erneut ausgeführt werden.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top