3

PHP/MySQL と jQuery を使用して次のことを最善に行う方法を考えていました。

都市と開始日を入力する基本的な検索マスクがあります。検索結果ページに進み、特定のパラメーター (チェックボックス、jQuery スライダー、テキスト入力など) で検索結果を絞り込むことができます。検索結果は、ページ全体をリロードせずにその場で更新する必要があります...

jQuery ajax と load を使用して別の php ファイルに情報を送信し、SELECT などを実行して結果を検索の詳細ページに返すことができますが、検索結果を絞り込むさまざまな変更を組み合わせる方法がわかりません。

さらに、詳細ページにはすでに結果が表示されているので、これ以上結果を追加する必要はなく、結果が収まらなくなった結果を「削除」する必要があります...

問題は、検索を絞り込むための各パラメーターがデータベース内の別のテーブルに接続されていることです。元のクエリに結合を追加する必要はありますか?また、どのように結合を追加すればよいですか? それとも、間違った方向に考えていますか?

4

3 に答える 3

2

はい、これは絶対に正しい方向です。使用する

$(document).ready(function() {  

    $('#ID_OF_YOUR_ELEMENT_TO_LOAD_INTO').load("load.php?parameter1=<?php echo $parameter1; ?>&parameter2=<?php echo $parameter2; ?>");

});

ユーザーが初めてページにアクセスしたときに結果を取得し、都市と日付に従って結果を取得します。

設定されているパラメーターをload.phpで確認し、設定されているパラメーターを使用してクエリを作成します。次に、フォーム(またはフォームによっては)が更新されたら、次のように.loadを再度使用する必要があります。

$('#ID_OF_YOUR_FORM_BEING_UPDATED').change(function() {

    $('#ID_OF_YOUR_ELEMENT_TO_LOAD_INTO').load("load.php?parameter1=<?php echo $parameter1; ?>&parameter2=<?php echo $parameter2; ?>&parameter3=<?php echo $parameter3; ?>");

});
于 2012-04-15T19:51:45.023 に答える
1

PHP/MySQL を介して初期タプルを取得し、それらを Javascript 構造に保存し、この構造から JavaScript を使用してデータを表示するために必要な html を作成します。

データをフィルタリングしたいときはいつでも、html を書き換えてその場でフィルター条件をチェックします。たとえば、フィルター条件に一致しない構造からタプルを書き込まないでください。

誰がこれを行っているかは、http://www.wowhead.comで確認できます。

もちろんこれは一つの方法にすぎません。;-)

于 2012-04-13T15:47:41.530 に答える
0

渡された引数に基づいて SQL クエリを生成するコードをいつでも作成できます。

ajax は、ユーザーが選択したものに基づいて、基本的な都市と日付から日付に加えて、一連の引数を使用してページをクエリできます。ページが以前に選択した検索オプションを保持している場合、ユーザーはさらにオプションを追加して、同じ方法でそれらを処理し続けることができるはずです。次に、php は、引数が $_POST または $_GET 変数に設定されているかどうかをテストし (一般的に ajax では $_POST の方が安全ですが、簡単にするために私の例では $_GET を使用します)、そのようなクエリを作成します。

例:

Javascriptは次のようなクエリを生成しますsearchAjaxHandler.php?city=Chicago&from=2012-03-01&to=2012-03-05&someColumnLowerRange=500&someColumnUpperRange=700

次に、php スクリプトは次のように処理されます。

$query = "SELECT * FROM Data WHERE City=? AND Date > ? AND Date < ?";
$arguments = array($_GET['city'], $_GET['from'], $_GET['to']);
if (isset($_GET['someColumnLowerRange'])) {
    $query .= " AND someColumn > ?";
    $arguments[] = $_GET['someColumnLowerRange'];
}
if (isset($_GET['someColumnUpperRange'])) {
    $query .= " AND someColumn < ?";
    $arguments[] = $_GET['someColumnUpperRange'];
}
//execute the query
//using PDOs (google them...they are a good way to prevent sql injection and
//support multiple database types without modifying code too much), create a
//statement with the above query in put the statement in $statement

$statement->execute($arguments); //this uses the $arguments array to fill in the prepared statement's ?'s

//then do the stuff to get the retrieved rows out of the result returned

結局のところ、javascript 側は、以前のすべての結果を返された結果に置き換えることで、以前と同じことを行います。

于 2012-04-13T15:47:55.430 に答える