我有5个MySQL数据字段用于投票表:
您可以投票或投票支持投票。如果您在投票中投票,则帖子/人员字段将为空。如果您投票支持帖子,则投票字段将为空。
我想设置表格,这样你就可以将帖子ID或投票ID设为null,但不能同时设置两者。我正在使用phpmyadmin来管理我的数据库。
有什么想法吗?
答案 0 :(得分: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');
要检索投票支持投票的选民,您必须使用加入。这是一个例子,如果你想找到一个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;
如果您进行投票和投票,您有多对多的关系,即一个选民可以投票支持多个投票,一个民意调查可以有多个投票人。要在投票和民意调查表之间架起桥梁,请使用桥接表。此表包含所有投票号和投票组合。因此,当您想知道谁投票给某个特定的投票时,您需要将poll_id与poll_vote表中的poll_id相关联。然后使用poll_vote表和投票表中的vote_id将结果与投票表进行匹配。希望这可以帮助。祝你的项目好运。
答案 1 :(得分:0)
查看MySQL CREATE TABLE语法http://dev.mysql.com/doc/refman/5.1/en/create-table.html
请注意,NOT NULL或NULL是列定义的一部分。默认值为NULL。这只能应用于列,而不是列对。
这里的解决方案是制作两个单独的表,一个用于投票,一个用于投票。然后,您可以将相关字段放在每个表中。这也将节省您的空间,并使您的数据不易出错。