0

CRUD アプリケーションを構築しており、2 つの形式の検索を実装する必要があります。

基本検索機能は、キーワードを受け入れ、データベース テーブル内のすべての列でその特定のキーワードを検索します。検索キーワードは、www.website.com/category?q=keyword の形式で URL パラメータとして送信されます。ここには特別なことは何もありません...

高度な検索フォームでは、ユーザーは最大 5 つのキーワードを指定でき、それぞれについて、このキーワードを検索する必要があるデータベース テーブルから列を選択できます。つまり、高度な検索フォームには、最大 5 つのキーワードと列のペアが必要です。このフォームは POST 経由で送信されます (URL 文字の最大数の制限を回避したいため)。

結果はページ分割され、1 ページあたり 10 レコードを表示する必要があります。オンラインでページ付けクラスを検索しましたが、それらはすべてデータベース テーブル内のレコードの合計量を取得し、そのページに表示する必要がある選択を返します。ここでは大量のデータ セットを扱っているため、この方法を実行する余裕はありません。

これにより、要求されたページ番号 (および適用された場合は、検索フォームからの $_GET および $_POST パラメーター) を取得する独自のページ付けクラスを作成することになりました。それに基づいて、結果の合計数を計算し、ページの合計数を計算し、「前」ページと「次」ページがあるかどうかを判断します...また、実行される SQL ステートメント (LIMIT 値と OFFSET 値を含む) を返します。特定のモデル (私自身の MVC アーキテクチャ (別名フレームワークなし) を使用)。これにより、リクエストされたページの結果のみを取得できました。

問題: ユーザーがページを移動すると (「前へ」または「次へ」ボタンをクリックすると)、$_POST データが失われます。ただし、これらの値は、別のページの結果を取得するために必要です。

この特定の問題により、フォーラムの検索フォームについて考えるようになりました。それらの 1 つでクエリを送信したところ、検索 ID が URL に追加されていることに気付きました: example.com/forum/search.php?searchid=5672532

これは、フォームデータが何らかの形でどこかに保持されていることを意味します...そして、最も妥当なものから最も妥当でないものまで、最良のオプションは何かを考えています: - 各検索入力が例えば30分間保存されるデータベーステーブル - セッション - ファイル(非表示のフィールドは明らかにオプションではありません。リクエストと共に送信するには、フォームの送信ボタンを押す必要があるためです)

これについてのあなたの意見をここに書きたいと思います。あなたの何人かはすでにこの問題に遭遇しているはずです...

4

1 に答える 1

0

検索パラメーターをJSONまたはデータベースにエンコードされたURLで一定時間保存する(expiry列を作成する)のが最善の解決策のようです。

LIMITこのように、さまざまな句を使用してデータベースに何度もクエリを実行する必要があることに注意してください。

于 2012-08-06T18:18:40.317 に答える