2016-07-05 54 views
-1

我想构建一个相当简单的应用程序,它将严重依赖通过多个表查询数据并返回最相关信息的能力。SQL多个问题以查找最相关的数据

我最近在关系数据库中做了一个简短的课程,但是我希望实现的是低于我们所涵盖的范围。我有点迷失在从哪里开始,并寻找一些关于如何处理数据功能和查询的一般信息。显然,我不是在寻找某人回复很多代码,而是更多地指向正确的方向。

我想这样做:

  1. 我想为一组测试用户的挑选自己顶5个兴趣或消遣。
  2. 我想他们回答10个关于他们个性的简单问题。
  3. 我想要一个新的最终用户回答与测试用户相同的10个问题。
  4. 我想根据测试组给出的答案与答案的接近程度,以降序向最终用户返回最相关的兴趣或消遣,即如果他们具有相似的个性,他们可能会享受相同的兴趣或消遣。

我想这可能很像约会网站可能的工作方式。

从我在球场上,我想我会要求下表了解到但有可能是一个更好的办法:

User (UserID, Fname, Lname, Age) 
Question (QuestionID, Question, Answer1, Answer2, Answer3, Answer4, Answer5)...user would pick 1 answer here only 
User/Question (UserID/QuestionID, AnswerGiven) 
Pastime (PastimeID, PastimeName, Description) 
User/Pastime (UserID/PastimeID) 

我要补充的是,问题的答案是选择题和不文本由用户输入,因此只需要数字,即。用户选择了答案编号4.

任何人都可以指出我正确的方向:a)处理问题/答案,b)如何将所有答案分组在一起而不是多次查询数据库, c)如何根据最终用户向测试用户回答问题的方式来查询数据库以返回最相关的消遣时间。

任何帮助都非常感谢。

谢谢

+0

我会把答案变成他们自己的小表:答案表:AnswerID,AnswerText。然后,用户/问题将包含用户ID,问题ID,答案ID。 – dcoli

+0

谢谢你的建议dcoli。此外,我刚刚编辑我的原始问题,说问题是多项选择,所以,答案将只是数字(没有答案文字) – Sio

+0

你的意思是答案的价值将是一个数字(如解决数学问题),或将有是分配给每个多选选项的ID号码,还是复选框旁边的文字答案?如果是后者,我的桌子仍然会有帮助。 – dcoli

回答

0

除了我的意见,我认为你应该处理比较用户在代码中的答案。使用类似MIN函数的东西可能会在SQL中实现,但我不确定它会比代码中的速度更快,速度更慢。创建一个用户数组,其中每个数组元素都是一个用户对象,包含问题ID和答案ID值。然后遍历一个对象和下一个对象,合计匹配数量,并保存匹配数最高的用户。然后去找下一个用户,并且做同样的事情,只有当他有更多的比赛时才会救他。如果有人完美匹配,您可能只想打破循环并返回用户。如果您希望它比第一个匹配更随机,那么请事先随机混合阵列中的用户。