ページ間のPHP / MySQLの保管ユーザー検索、それらにユーザが戻るので、

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

質問

私は、PHP-MySQLのアプリケーションを書いています。アプリケーションは、ユーザがデータベースに対して検索を実行することができます。検索を実行すると、バックボタンをユーザーがクリックすると、それに育てられた項目を調べた後、それに戻る場合、彼らは、クエリを再送信したい場合、彼らは(それがポストを使用しています)求められます。どのデータベースで検索を再実行します。 GETを使用すると、再投稿への要求をもたらさないであろう - しかし、それはまだ、再び検索を実行します。

をデータベースでそれを再実行するからで、それを検索を保存し、リコールする方法はありますか?

多分セッションで -

これは、PHPでデータベースに保存し、または何らかの形ですることができますか?データは、これらの検索で出てくるがたくさんすることができ、私はそれがセッションのためにあまりにも多く、おそらくだような気がします。

私は想像することができる他の方法は、いくつかの種類の一時テーブルで、データベース内に格納することです。私はその後、INSERT INTO選択し、クエリに予定の列を持つテーブルを作成します。そして、テーブルから*を選択します。また、これはかなり悪いアイデアのように思えます。周りに浮い動的に作成された一時表がたくさん。

私はこれを行うことができます知っています。保存した検索は、多くのWebアプリケーションであなたが見るものです。だから、どのようにそれが一般的に行われている?

役に立ちましたか?

解決

memcachedの

または

APC

しかし、私はあなたが何らかの理由<全角>なぜは、検索の結果をキャッシュしたいを与えていないことに注意してください。 「それは高速です、と私はそれが私のアプリは、よりスケーラブルになることを読んでいるので、」このための通常の理由があります。これは、時期尚早の最適化のようなにおいがする。

私はあなたのアプリケーションを構築し、それをプロファイリングお勧めします。これらの「検索」はどのようにコストがかかりますか? のはなぜの彼らは高価ですか?それは、貧しいスキーマ設計ですか?それは貧しいインデックスですか?それは、ストレージエンジンのお粗末な選択ですか?

あなたは、MySQLは、A クエリキャッシュ、右?多くの場合、これはあなたが必要とするすべてのかもしれません。その後、再びそれを実行し、mysqlクライアントを使用して、高価な「検索」クエリのいずれかを実行してみてくださいと時間に注意してください。参照してください?

他のヒント

固定するエラー、あなたが実際に検索を実行し、その後すぐに新しいページにリダイレクト、セッション中またはデシベルで要求を格納することができます「あなたは再提出したいです」ます:

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);
}
その後、$ _SESSIONからのクエリフィールドをつかむことができます。

[ '検索'] [22]またはデシベル...

の結果を保存するためとして、あなたがブラウザのキャッシュに頼ることができる、またはあなたがセッションまたはデシベルで個々のSERPsを保存することができます...必要に応じて、いくつかの点で古いものを出し期限切れ...

結果表を作成すると、罰金(と複雑な検索のページネーションをスピードアップするでしょう)ですが、キャッシュとページネーションは、より一般的な方法だろうので、あなたが潜在的に、そこでのヒット数百万を持っている可能性があります。

ユーザーが後で検索数日または数週間に戻りたい場合は、

は、あなただけの保存されたクエリのフィールドで検索を再実行することができます。

scroll top