【问题标题】:Database displaying wrong - Webmatrix数据库显示错误 - Webmatrix
【发布时间】:2014-12-05 04:27:16
【问题描述】:

我是这个网站的新手。我正在开发我的第一个包含数据库的网站。我决定按照网上找到的实验室教程在 Webmatrix 中创建一个网站,然后创建一个显示数据的网页。我完成了数据库的创建,但现在无法正确显示它们。以下是我目前遇到问题的代码。给出的实验室代码没有引用 // PLayer.firstname 到 // WHERE Players.team = Teams.teamiD"; 但是当我引用它时我没有收到错误,但由于某种原因它显示了玩家加入每支球队。因此,如果我要添加另一支球队,每个球员将被列出 4 次而不是 5 次。 基本上,数据库包含 2 个与团队和团队 ID 有关系的表。当我在数据库中执行查询以搜索球员时,它只显示他在一个球队中,所以我假设现在这段代码的编写方式是循环每个球队的每个球员。谁能帮帮我

   `@{  
    var db = Database.Open("Baseball");
    var selectQueryString = "SELECT * FROM Players, Teams";
        //@"SELECT TOP 10
          // Players.firstname,  
          // Players.lastname,  
          // Teams.teamname,  
          // Players.runscore
      // FROM Players, Teams  
       // WHERE Players.team = Teams.teamiD";

    }
    <!DOCTYPE html>
    <html lang="en">
    <title>Players standings</title>
    <style>
        h1 {font‐size: 20px;}
        table, th, td {
          border: solid 1px #bbbbbb;
          border‐collapse:collapse;
          padding:5px;
        }
     </style>
  </head>
  <body>
    <h1>Players' championship ‐ standings</h1>
    <table>
        <thead>
            <tr>
                <th>Players</th>
                <th>Team</th>
                <th>runscore</th>
            </tr>
        </thead>
        <tbody>
             @foreach(var row in db.Query(selectQueryString)){
             <tr>
                  <td>@row.firstname  @row.lastname</td>
                 <td>@row.teamname</td>
                  <td>@row.runscore</td>
             </tr>
            }
        </tbody>
    </table>
   </body>
    </html>`

由于信誉点,我无法发布图片,但网页是这样显示的:

球员总冠军 - 积分榜

球员队跑分 大卫奥尔蒂斯金莺 134 大卫奥尔蒂斯红袜队 134 大卫奥尔蒂斯天使 134 大卫奥尔蒂斯道奇队 134 迈克·特劳特金莺 132 迈克·特劳特红袜队 132 迈克鳟鱼天使 132 迈克·特劳特道奇队 132 汉利·拉米雷斯金莺 102 汉利·拉米雷斯红袜队 102 汉利·拉米雷斯天使 102 汉利·拉米雷斯 道奇队 102 Yasiel Puig 金莺 4 Yasiel Puig 红袜队 4 Yasiel Puig 天使 4 Yasiel Puig 道奇队 4 乔什·汉密尔顿 金莺 75 乔什·汉密尔顿红袜队 75 乔什·汉密尔顿天使 75 乔什·汉密尔顿 道奇队 75

【问题讨论】:

    标签: php mysql database webmatrix


    【解决方案1】:

    您的查询没有用。你告诉它要让每一个球员,每一个球队,它做到了。它应该如何将一名球员与正确的球队相匹配?您还没有告诉它,因此它将每个球员与每支球队相匹配。这称为笛卡尔连接,可能是非常非常坏的消息。您需要添加有关如何将玩家加入正确团队的部分。你可以通过两种方式做到这一点:

    select *
    from Players, Teams
    WHERE Players.team = Teams.teamiD
    

    这是“老式”的做法。更新的方法,它做同样的事情,但更容易阅读是:

    select *
    from Players p
    inner join Trans t on t.Id = p.teamID
    

    查找联接的语法。连接要么是内部的,要么是外部的,要么是交叉的,然后是左的、右的或全的。 Wikipedia article 可能不是一个糟糕的起点。然后查看您正在使用的任何数据库系统的文档(我看到一个 MySQL 标记,所以应该是 here)。

    【讨论】:

    • 非常感谢您提供的更有意义的帮助。我仍然收到编译器错误消息:CS1002:;预计在 WHERE 线上。这是我替换顶部代码的内容,我没有使用加入代码,因为我无法理解它和 Player p 。 '@{ var db = Database.Open("棒球"); var selectQueryString = @"select * FROM Players, Teams WHERE Players.team = Teams.teamiD;" }'
    • 您是在 Database.Open 上还是在运行查询时收到此错误?
    • 从 WebMatrix 中的运行命令在 Web 浏览器上运行应用程序时出现此错误
    • 好的。不太有帮助。可以用 WebMatrix 调试吗?
    • 寻找那个选项,我找到了!看起来这是一个半冒号错误,非常感谢! @simon-at-rcl
    猜你喜欢
    • 2013-05-27
    • 2012-07-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-04-11
    相关资源
    最近更新 更多