使用count函数创建视图

时间:2014-06-02 14:55:22

标签: asp.net sql sql-server vb.net view

我创建了多选题系统,并创建了以下表格。我想要一个结果显示学生选择了多少正确的答案以及错误的答案。

登录表

name        usergroup    matricno      
alex          1           ac91919      
sarah         1           ac92151      

测验表

QuizID   QuizText
1        level 1
2        level 2
3        level 3

问题表

QuestionID QuestionText
1          Question1
2          Question2
3          Question3

答案表。它有fk来询问表和位以确定答案是否正确[1-right 0-wrong]

answerID answer_question_id(fk) answertxt answer_isright
1          1                    answer1   1
2          1                    answer2   0
3          1                    answer3   0
4          2                    answer1   1
5          2                    answer2   0
6          2                    answer3   0
每个回答测验的用户

结果表。从下表,学生matric no ac91919回答quizid2,这是2级。

ResultID   Result_Quiz_ID    MatricNo 
  1           2             ac91919  

resultdetail表存储用户的答案。 ResultDetail_ResultId(fk to resultID)ResultDetail_AnswerId(FK to TblAnswers)

ResultDetailId      ResultDetail_ResultId      ResultDetail_AnswerId 
      1                      1                             2      

从这些表中,我如何创建一个像这样的视图:例如,alex有5个正确答案,10个错误答案。此视图仅计算每个用户的最大重新计数(最新结果)。

name       QuizTxt        RightAnswer    WrongAnswer        
alex       Level 1            5              10               
sarah      Level 2            3              9              

数据库结构:

Table login

name varchar(55)
usergroup int
matricno varchar(20)

TblQuiz

Quiz_Id int 
Quiz_Name nvarchar(200) -- 


TblQuestions

Question_Id int 
Question_Quiz_Id int --(FK To TblQuizes) 
Question_Text nvarchar(200) 

TblAnswers

Answer_Id int 
Answer_Question_Id int --(FK To TblQuestions) 
Answer_Text nvarchar(200)
Answer_IsCorrect bit

 TblResults

Result_Id int 
Result_Quiz_Id int -- 

TblResultDetails

ResultDetails_Id int
ResultDetails_Result_Id int 
ResultDetails_Answer_Id int 

1 个答案:

答案 0 :(得分:1)

我过去做过类似的事情。你可以为答案制作另一张表 对于每一行都将是一个答案。这样做的好处是你可以显示单个玩家,也可以显示大多数人的回答最高分 你没有要求任何代码,所以我认为你需要一种方法。

您可以通过将它们放入数组中来循环遍历项目列表。然后你可以将它放在listview或datagrid中,或者你需要或想要使用循环函数构建的东西。列表视图和数据视图是最常见的,但您可以使用组合框等。因为我不知道您的数据库在哪里以及我无法帮助您使用代码的类型。一般来说就是这样。

  1. 从数据库中选择您需要的东西(可能是全部)
  2. 将所选项目数据库放入数组中。
  3. 循环通过数组。
  4. 在循环过程中将每个项目加载到其中。
  5. 以下是如何连接数据库并加载数据的示例

    http://www.w3schools.com/aspnet/showaspx.asp?filename=demo_dbconn_repeater

    <%@ Import Namespace="System.Data.OleDb" %>
    
    <script runat="server">
    sub Page_Load
    dim dbconn,sql,dbcomm,dbread
    dbconn=New OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0;
    data source=" & server.mappath("northwind.mdb"))
    dbconn.Open()
    sql="SELECT * FROM customers"
    dbcomm=New OleDbCommand(sql,dbconn)
    dbread=dbcomm.ExecuteReader()
    customers.DataSource=dbread
    customers.DataBind()
    dbread.Close()
    dbconn.Close()
    end sub
    </script>
    
    <html>
    <body>
    
    <form runat="server">
    <asp:Repeater id="customers" runat="server">
    
    <HeaderTemplate>
    <table border="1" width="100%">
    <tr>
    <th>Companyname</th>
    <th>Contactname</th>
    <th>Address</th>
    <th>City</th>
    </tr>
    </HeaderTemplate>
    
    <ItemTemplate>
    <tr>
    <td><%#Container.DataItem("companyname")%></td>
    <td><%#Container.DataItem("contactname")%></td>
    <td><%#Container.DataItem("address")%></td>
    <td><%#Container.DataItem("city")%></td>
    </tr>
    </ItemTemplate>
    
    <FooterTemplate>
    </table>
    </FooterTemplate>
    
    </asp:Repeater>
    </form>
    
    </body>
    </html>
    

    还有许多其他方法可以像LINK()等一样。只需使用谷歌或bing找到更多方法。