0

我有 5 个 MySQL 数据字段用于投票表:

  • 帖子编号
  • 投票编号
  • 投票编号
  • 选民
  • 投票人

您可以在投票中投票或为帖子投票。如果您在投票中投票,则 post/person 字段将为空。如果您为帖子投票,则投票字段将为空。

我想设置表格,以便您将帖子 ID 或投票 ID 设为空,但不能同时设置两者。我正在使用 phpmyadmin 来管理我的数据库。

有任何想法吗?

4

2 回答 2

2

我必须同意上面的 jmilloy 最好的办法是创建单独的表。这是一个如何工作的例子:

表结构和样本数据:

CREATE TABLE post (
    post_id INT AUTO_INCREMENT PRIMARY KEY,
    vote_id INT
 );

CREATE TABLE poll (
    poll_id INT AUTO_INCREMENT PRIMARY KEY,
    vote_id INT
  );

CREATE TABLE voter(
  vote_id INT AUTO_INCREMENT PRIMARY KEY,
  name VARCHAR(30)
  );

INSERT INTO post (vote_id) VALUES(1),(2),(3),(6);

INSERT INTO poll (vote_id) VALUES(3),(5),(4),(7);

INSERT INTO voter(name) VALUES ('bob'),
('Jack'),
('Joe'),
('Shara'), 
('Hillary'), 
('Steven'), 
('Sandra');

要检索为帖子投票的选民,您必须使用 JOIN。这是一个示例,如果您想为帖子编号 2 找到选民,这将是什么样子。

SELECT post.post_id, vote.name  
FROM (post 
 JOIN post_vote 
ON post_vote.post_id = post.post_id) 
 JOIN vote 
ON vote.vote_id = post_vote.vote_id
WHERE post.post_id = 2;

SQL 小提琴演示

一些解释,如果你有一个投票和投票,你有一个多对多的关系,即一个选民可以投票给多个投票,一个投票可以有多个选民。要在投票表和民意调查表之间架桥,您可以使用桥接表。此表包含所有投票号码和投票组合。因此,当您想知道谁为特定民意调查投票时,您需要将 poll_id 与 poll_vote 表中的 poll_id 链接起来。然后使用 poll_vote 表和投票表中的 vote_id 将结果与投票表进行匹配。希望这可以帮助。祝你的项目好运。

于 2013-02-03T03:50:51.970 回答
0

查看 MySQL CREATE TABLE 语法http://dev.mysql.com/doc/refman/5.1/en/create-table.html

请注意,NOT NULL 或 NULL 是列定义的一部分。默认值为 NULL。这只能应用于列,而不是列对。

这里的解决方案是制作两张单独的表格,一张用于投票,一张用于投票。然后您可以将相关字段放在每个表中。这也将节省您的空间,并使您的数据不易出错。

于 2013-02-03T03:06:34.350 回答