首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在调查系统中按顺序对问题进行排序

在调查系统中按顺序对问题进行排序
EN

Stack Overflow用户
提问于 2013-01-25 02:52:48
回答 2查看 155关注 0票数 0

我正在使用PDO/MySQL和PHP为我的大学的一位教授建立一个调查系统。我有一个问题表,该表包含大量信息,包括question_idquestionenabledorder。创建调查时,enabled = 1所在的所有question_id都被压缩为一个字符串,并存储在一个单独的survey表中。将来编辑问题时,系统只会禁用旧问题,并将新版本添加到表格的末尾,并使用适当的order值更新所有内容,从而允许仍以原始状态查看旧调查。

我正在努力弄清楚如何最好地处理这方面的排序问题。如果我在数据库中为索引存储了一个字符串(例如,我的字符串将是2,3,5,6,9,4,1),那么我可以很容易地显示输出数据--我可以使用explode(),然后迭代该数组的默认0索引,依次调用每个问题。如何以正确的顺序存储值?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-01-25 03:15:48

通过内爆成一个字符串,你就是在反规范化你的数据。我建议不要这样做,尤其是在这种情况下。使用单独的表来管理问题和调查之间的链接。

我发现这有点奇怪,因为我还没有完全理解你想要做什么。我认为你正在创建一个单一的在线调查-1个具有单一目的的调查,而不是一个用于创建大量不相关调查的工具。所以如果我的假设是正确的,我会做更多的表

代码语言:javascript
复制
TABLE Surveys (
SurveyId INT UNSIGNED PRIMARY KEY AUTO_INCREMENT,
SurveyTitle VARCHAR(100) NOT NULL,
SurveyDescription TEXT,
Owner VARCHAR(100),
BLAH BLAH BLAH
);

TABLE Questions (
QuestionId INT UNSIGNED PRIMARY KEY AUTO_INCREMENT,
Version INT UNSIGNED NOT NULL,
Question TEXT,
OrderNumber INT UNSIGNED,
Enabled ENUM('Yes', 'No') DEFAULT 'Yes'
);

TABLE SurveyQuestions (
SQId INT UNSIGNED PRIMARY KEY AUTO_INCREMENT,
SurveyId INT UNSIGNED NOT NULL,
QuestionId INT UNSIGNED NOT NULL,
Version INT UNSIGNED NOT NULL
);

TABLE QuestionHistory (
QuestionId INT UNSIGNED,  // notice we dont have a primary key i would probably do a composite key on QuestionId and Version
Version INT UNSIGNED NOT NULL,
Question TEXT,
OrderNumber INT UNSIGNED,
Enabled ENUM('Yes', 'No') DEFAULT 'Yes',
DateSuperceded DATETIME
);

您还需要一个用于调查对象和他们的回答的表,回答可能应该链接到SurveyQuestions表。在问题历史记录表上使用自动id也更好-但这取决于您到底想要做什么。

这是一个比我想要发布的更长的答案。如果我混淆了这个问题而不是澄清的话,很抱歉。如果你想发布你正在尝试创建的更详细的规范,那么我可以给你更好的建议。

票数 1
EN

Stack Overflow用户

发布于 2013-01-25 02:59:53

只要摆脱"all question_ids are imploded into a string and stored in a separate survey table"部件,因为它是无用的和错误的。

因此,每次您需要您的问题ids顺序-只需从问题表中选择它们,按order字段排序。

不要无缘无故地把事情复杂化。你会让你的生活变得更轻松。

一个真正的原因,我是说,不是想象中的原因。

当涉及到数据库设计时,这样的规则可以用一条定律的形式来表述:Always keep your database in a Normal form

我希望你有另外一个表,由user idquestion idan answer组成。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/14508608

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档