0

投票システムを作成しました。ログインしているユーザーのみが投票できます。ユーザーへの外部キーを保存し、次のようにポーリングするテーブルがあります。

poll_voters
| ref_user_id | ref_poll_id |

ユーザーが投票すると、テーブル内の現在の投票でユーザーIDが存在するかどうかを確認します。含まれている場合、ユーザーはすでに投票しています。

投票フォームを表示するか、結果(ユーザーがすでに投票している場合)を表示するかを知るために、ページの読み込みごとにこれを行う必要があるかどうか疑問に思っています。もう1つの方法は、ユーザーが投票したかどうかを示すセッションを作成することです。そして、彼がログインするとき、私はもちろんチェックをしてセッションを設定する必要があります。

私は何をすべきだと思いますか?

4

5 に答える 5

1

投票インジケーターなしですべてのHTMLをレンダリングし、ページがブラウザーに読み込まれた後、AJAX呼び出しを実行してアイテムの投票ステータスを取得することをお勧めします。

これにより、ページをブラウザまたはサーバーに静的にキャッシュできますが、動的更新は引き続きサポートされます。そのため、ユーザーがページに再度アクセスし、投票ステータスを変更した場合は、更新されます。

それ以外の場合は、ユーザーのセッションごとに常にすべてのHTMLページを異なる方法で再レンダリングする必要があります。

于 2013-01-22T17:46:12.453 に答える
1

あなたはそれを挿入ステートメントに追加することができます

if not exists(select ref_user_id 
    from poll_voters 
    where ref_user_id =@ref_user_id and ref_poll_id = @ref_poll_id)
insert into poll_voters (ref_user_id ,ref_poll_id )
values (@ref_user_id ,@ref_poll_id )

そうすれば、各人が投票ごとに1回だけ投票できる場合

于 2013-01-22T18:16:33.540 に答える
1

ユーザーが投票に投票したかどうかに関係なく、レコードをレンダリングするときに少しフェッチします。投票した場合は、投票インジケーターを表示せず、データベースに挿入する前に、レコードが存在するかどうかを確認します。私の経験から、これは最良の方法。

于 2013-01-22T18:37:15.483 に答える
0

セッションを作成し、ユーザーがログインしたときに投票ステータスを確認することをお勧めします。ページを読み込むたびにデータベースを確認する必要はありません。これは非効率的です(ただし、読み込みが軽い場合でも機能します)。

また、ユーザーが投票したときにページ(またはajaxを使用して要素)を更新する必要があります。

于 2013-01-22T17:40:03.947 に答える
0

複数のアクティブなポーリングがある場合は、ポーリングIDもDBに保存する必要があります(これ以上のポーリングは必要ないかもしれませんが、必要な場合はどうなりますか?)。この場合、ページが読み込まれるたびにクエリを実行して、ユーザーに投票済みまたは未投票の投票を表示することができます。ただし、すべてのページに最新の投票のみが表示され、最新の投票のみがクエリを実行する必要があります...

于 2013-01-22T17:49:53.473 に答える