1

テーブルitems

id  maxVotes    parent      type
10  2           9           heading 
11  0           10          item
12  0           10          item

テーブルvotes

userId  votedFor parent
1       11       10 
1       12       10
2       12       10

アイテムが存在するかどうか、およびユーザーがその見出しの下で許可されているアイテムの最大数に投票したかどうかを確認しようとしています。

上記の例では、テーブルitemsにアイテムが含まれています。テーブルvotesには、ユーザーが投じた投票が含まれています。

テーブルitems type : headingは、ユーザーが投票できるアイテムの最大数を指定しますcol : maxVotes。この場合は2です。

votes user 1で は 2 つの項目に投票しましitemsたが、その見出しの下にある項目にはこれ以上投票できません。ユーザー 2 は、あと 1 アイテムに投票できます。

それはそのように続きます。

私が現在行っている方法(phpを使用)は、次のとおりです。

select id, parent from items where id = 11 //The item exists.

select maxVotes from items where id = parent // This gives me the maximum items a user can vote for.

select count(votedFor) as votes from votes where userId = 1 // This'll give me 2.

User 1 can vote no more, but user 2 can vote once more -> Add his vote to the votes table

上記の方法以外に、これを行うためのより簡単で効率的で洗練された方法を考えられますか?

これはまだ実装されていないため、変更を加えることができます。それとも、これが最善の方法ですか?

4

2 に答える 2

0

次のように、voteCount フィールドをもう 1 つ追加してテーブル構造を変更し、voteFor を json 構造に格納できます。

Table: UserVote

userId  voteCount voteFor
1       2         {11,12}
2       1         {11}

したがって、投票中にこのテーブル自体にカウントを挿入し、ここから投票数を確認できます。

(また)

カウントのみを持つために、voteCount として 2 つのテーブルと共にもう 1 つのテーブルを追加します。

Table: VoteCount

userId  voteCount
1       2        
2       1        


Table items

id  maxVotes    parent      type
10  2           9           heading 
11  0           10          item
12  0           10          item

Table votes

userId  votedFor
1       11
1       12
2       12

最初の方法は効率的な方法で、テーブルを 1 つ減らします。更新も簡単。DB から json データを取得し、それをデコードします。その配列に 1 つの ID を追加します。エンコードして更新します。それで全部です。

于 2013-05-22T11:28:18.643 に答える