存储在MySQL表中的多个投票选项

存储在MySQL表中的多个投票选项,mysql,count,voting,voting-system,Mysql,Count,Voting,Voting System,我有一个投票,它有一个未定义的选项数(它只能有2个选项,但也可以有10个或20个或更多选项可供选择)。我需要在MySQL表中存储当前的投票计数。我想不出一种集中存储它们的方法,除了: 创建一个字段投票计数并存储映射到计数的投票选项的序列化数组。 当该字段中出现新的投票数据时,将读取、取消序列化,相应的值将递增,然后将该字段写入。这需要2次查询,每秒可能有5次或更多的投票 因此,我需要一种方法来存储未知数量的投票选项的投票计数,并能够快速访问它(我需要投票页面上显示的每个选项的最新计数)和快速更新

我有一个投票,它有一个未定义的选项数(它只能有2个选项,但也可以有10个或20个或更多选项可供选择)。我需要在MySQL表中存储当前的投票计数。我想不出一种集中存储它们的方法,除了: 创建一个字段投票计数并存储映射到计数的投票选项的序列化数组。 当该字段中出现新的投票数据时,将读取、取消序列化,相应的值将递增,然后将该字段写入。这需要2次查询,每秒可能有5次或更多的投票


因此,我需要一种方法来存储未知数量的投票选项的投票计数,并能够快速访问它(我需要投票页面上显示的每个选项的最新计数)和快速更新它(当新的投票进来时)。它必须在MySQL表中。投票选项的数量没有“上限”。

你就不能有一个问题表和另一个可能的答案表(每个问题多行,你想要多少就有多少行)。然后将计数存储在答题表上,或者(更好)有另一个实际输入的答题表(这样你可以记录答题人的详细信息,并方便地使用SUM/COUNT计算每个选项的投票数)。

难道你不能有一个问题表和另一个可能的答案表吗(每个问题多行,任意多行)。然后将计数存储在答案表中,或者(更好)另存一个实际输入答案表(这样,您可以记录进行回答的人员的详细信息,并轻松使用SUM/COUNT计算每个选项的投票数)处理多值属性或重复值的标准模式是添加第二个表

考虑一个可以有多个行项目的采购订单。我们在子表中表示行项目,在采购订单表中用外键表示父表:

CREATE TABLE `purchase_order` (id int not null, foo varchar(200), ... );
CREATE TABLE `line_item` (id int not null, order_id int not null, ... ); 
ALTER TABLE `line_item` ADD FOREIGN KEY (order_id) REFERENCES order(id) ;


INSERT INTO purchase_order (id, foo) VALUES (101, 'bar'); 

INSERT INTO purchase_order (id, order_id) VALUES (783, 101);
INSERT INTO purchase_order (id, order_id) VALUES (784, 101);
INSERT INTO purchase_order (id, order_id) VALUES (785, 101);
我们可以获得与采购订单关联的行项目计数,如下所示:

SELECT COUNT(1)
  FROM line_item 
 WHERE order_id = 101; 
SELECT o.id, COUNT(l.id) AS count_line_itesm
  FROM purchase_order o
  LEFT
  JOIN line_item l
    ON l.order_id = o.id
 GROUP BY o.id 
或者,我们可以获得每个采购订单的行项目计数,如下所示:

SELECT COUNT(1)
  FROM line_item 
 WHERE order_id = 101; 
SELECT o.id, COUNT(l.id) AS count_line_itesm
  FROM purchase_order o
  LEFT
  JOIN line_item l
    ON l.order_id = o.id
 GROUP BY o.id 

在您的情况下,您需要表示哪些实体(人、地点、事物、概念或事件;这些实体可以唯一标识,并且您需要存储有关这些实体的信息)

我很难概念化您需要表示的实体

poll -
poll_question - a single question on a given poll
poll_question_answer - a possible answer to a question to a given poll question
voter - 
ballot - associated with one voter and one poll (?)
vote - the answer given to a particular poll question

好的数据库设计来自于对实体和关系的理解,以及开发合适的模型。

处理多值属性或重复值的标准模式是添加第二个表

考虑一个可以有多个行项目的采购订单。我们在子表中表示行项目,在采购订单表中用外键表示父表:

CREATE TABLE `purchase_order` (id int not null, foo varchar(200), ... );
CREATE TABLE `line_item` (id int not null, order_id int not null, ... ); 
ALTER TABLE `line_item` ADD FOREIGN KEY (order_id) REFERENCES order(id) ;


INSERT INTO purchase_order (id, foo) VALUES (101, 'bar'); 

INSERT INTO purchase_order (id, order_id) VALUES (783, 101);
INSERT INTO purchase_order (id, order_id) VALUES (784, 101);
INSERT INTO purchase_order (id, order_id) VALUES (785, 101);
我们可以获得与采购订单关联的行项目计数,如下所示:

SELECT COUNT(1)
  FROM line_item 
 WHERE order_id = 101; 
SELECT o.id, COUNT(l.id) AS count_line_itesm
  FROM purchase_order o
  LEFT
  JOIN line_item l
    ON l.order_id = o.id
 GROUP BY o.id 
或者,我们可以获得每个采购订单的行项目计数,如下所示:

SELECT COUNT(1)
  FROM line_item 
 WHERE order_id = 101; 
SELECT o.id, COUNT(l.id) AS count_line_itesm
  FROM purchase_order o
  LEFT
  JOIN line_item l
    ON l.order_id = o.id
 GROUP BY o.id 

在您的情况下,您需要表示哪些实体(人、地点、事物、概念或事件;这些实体可以唯一标识,并且您需要存储有关这些实体的信息)

我很难概念化您需要表示的实体

poll -
poll_question - a single question on a given poll
poll_question_answer - a possible answer to a question to a given poll question
voter - 
ballot - associated with one voter and one poll (?)
vote - the answer given to a particular poll question

好的数据库设计来自于对实体和关系的理解,以及开发一个合适的模型。

你能提供一些示例数据来更好地说明这个问题吗?@GordonLinoff,解决方案现在是一个公认的答案。假设我有两个民意测验:
你同意吗:是|否
你不同意吗:是|否| maybe
现在我需要为MySQL表中的每个选项存储计数。我不能简单地为“是”、“否”和“可能”创建一个字段,因为不是每个轮询都使用所有字段,可能有30或40个选项还不是字段,这意味着我需要在每次创建新轮询时更改表。您能提供一些示例数据来更好地说明这些字段吗问题?@GordonLinoff,解决方案现在是一个公认的答案。假设我有两个投票:
你同意吗:是|否
你不同意吗:是|否|可能
现在我需要存储MySQL表中每个选项的计数。我不能简单地为“是”、“否”和“可能”创建一个字段,因为不是每个投票都会使用它们,而且可能会有be 30或40个选项不是字段,这意味着每次创建新的投票时我都需要更改表。谢谢。这是我将要做的。为evry poll创建带有“仅回答”选项的表。谢谢。这是我将要做的。为evry poll创建带有“仅回答”选项的表。是的。要这样做。Spencer首先回答。但无论如何,谢谢。+1.T他的方法是我会采用的,一个父表和一个带有外键的子表。没问题,尽管我似乎是第一个到达那里;-)是的。要这样做。斯宾塞先回答了。但是无论如何,谢谢你。+1。这是我会采取的方法,一个父表和一个带有外键的子表。没问题,尽管我似乎是先到的;-)