0

これが私のテーブルの様子です:http://jsfiddle.net/Draven/kGtx7/14/

各ヘッダーセルはクリック可能で、そのフィールドおよびASC/DESCで並べ替えることができます。その並べ替えオプションをどこかに保存できるようにしたいので、それは記憶されますが、それを行うための最良の方法はわかりません。

これが私が考えていたオプションです...

  1. テーブルの作成sort_fieldsort_orderフィールドusers
  2. 、、およびフィールドuseridとともに新しいテーブルを作成するsort_fieldsort_order
  3. またはクッキー、しかし私はこれが最悪のオプションだと思います
4

5 に答える 5

1

これは解釈に任されていますが、それぞれの場合に独自の用途があります。

1)テーブルに2つのフィールドを追加するusersと、これらの値を取得するための呼び出しが簡単になりますが、問題へのアプローチは..よりもはるかに醜いです。

..2)リレーショナルデータベースは、そのように使用するために構築されています。パフォーマンスの点ではわかりませんが、リレーショナルデータベースの機能を使用すると、データベースのナビゲートと理解/操作が容易になることは知っています。より複雑な呼び出し(つまり、結合など)が必要になる場合もありますが、トレードオフには価値があると思います。

3)Cookieは非常に優れたソリューションです。これらは一時的な場合に使用される可能性がありますが、後で使用するために情報を保存しようとすると、Cookieが簡単に削除されたり、有効にならない場合があり、その時点でサイトが大幅に悪化する可能性があります。

于 2012-08-22T00:29:15.977 に答える
1

私たちはあなたが何を望んでいるのかはっきりしていないと思いますが、あなたはこのようなものを望んでいると思います:

ステップ1:2つのセッション変数に並べ替え値を入力するクエリを実行します。ステップ2:このコードのようなことをします。

$sortHeadClicked = $_SESSION['headClicked']
$sortReturnDirection = $_SESSION['returnDirection']

//TODO: validate data before query

if ($result = $mysqli->query("SELECT * FROM table ORDER BY $sortHeadClicked $sortReturnDirection)) 
{
    //TODO: Get results
}

ステップ3:あなたの素晴らしいように笑う

または、ある種のサブ選択クエリを使用することもできます。

注:これは単純なロジックであるため、この例では覚えていません。ただし、getを一時的に記憶したいだけの場合は、getをセッション変数に入れることができます。

ただし、これらを永続的に記憶したい場合は、ユーザーのテーブルに2つの列が必要です。ここで、これらをセッションに配置するか、副選択クエリを使用します。

于 2012-08-22T00:34:13.693 に答える
0

実際、Cookieを使用してユーザーセッションIDを保存し、セッションデータをデータベース、フラットファイル、またはmemcachedに保持することは、これを解決するための非常に一般的な方法です。ある種のレジストリのように、ユーザーごとの値を自由に取得できる、このための再利用可能なメカニズムを設定すると便利です。もちろん、これはユーザーログインがある場合にのみ機能します。そうしないと、ユーザーがセッションを終了すると(ブラウザウィンドウを閉じると)ユーザーIDが失われるため、そのデータを保存しても意味がありません。ほとんどのWebアプリは、Cookieを使用してユーザーを識別します。そのクッキーを削除すると、それはあなたを忘れて、あなたはログアウトします。

基になるテーブルを変更する必要があるため、ユーザーごとに別の「設定」を追加したい場合、最初のソリューションは問題になります。

PHPを使用している場合は、ZendSessionでアイデアを確認してくださいそうでない場合でも、概念は適用されます。

于 2012-08-22T00:27:41.377 に答える
0

私はあなたのニーズに依存することを恐れています。この問題の見方:


  1. ユーザーがブラウザでCookieを削除した場合に備えて、この設定をブラウザ、PC間で共有する必要がある場合に適しています。ただし、柔軟性はありません。別のテーブルを追加する必要がある場合は、2つのフィールドも追加します。
  2. コンピュータやブラウザなどの間で共有される方法に関しては1と同じですが、より柔軟性があります。テーブル名の列を簡単に追加できます。
  3. この設定がそれほど重要ではなく、場合によっては設定を緩めることができる場合があります。この解決策は最も簡単ですが、うまくいかない場合があります
于 2012-08-22T00:27:56.567 に答える
0

並べ替え順序をプロファイルに保存するには、フォーム内にテーブルを作成し、並べ替え可能なフィールド名をinputsにします。フィールド名の1つ(たとえば、場所で並べ替え)をクリックしたらaction、データベース上のプロファイルのフィールドを更新するPHPスニップをフォームに実行させます。

または、ajaxを使用できる場合は、データベースの更新をajax呼び出しに追加して、フォームをスキップすることもできます。

于 2012-08-22T00:30:19.627 に答える