0

最初我的问题是我的帖子重复了。我相信这是因为我没有在 SQL 语句中链接我的表。现在我已经完成了,我在 if info.eof 语句之后打印了“未找到数据”。

我确信数据库中有我手动检查的信息,但是没有成功。

这是我的代码:

<% option explicit %>
<!DOCTYPE html>
<html>
<head>

    <link rel="stylesheet" type="text/css" href="normalize.css">
</head>

<body>
<!--#include file="header.asp"-->
<!--#include file="dbconn.asp"-->



<%


    dim sql, info

'                               0                 1      2        3         4                5              
 SQL = "select projectName, UserName, Category, Created, url, Projectstable.description "&_
        "from ProjectsTable, PictureTable, Usertable, CategoryTable "&_
        "where Projectstable.ID=PictureTable.projectNum AND "&_
        "categoryNum=CategoryTable.ID AND "&_
        "ProjectsTable.userNum=Usertable.ID AND "&_
        "UserTable.ID=PictureTable.userNum "&_
            "order by Created"

set info=conn.execute(SQL)

  if info.eof then
    response.write "<p>No Data Found</p>"
  else

    do 
      response.write "<h1>" & info(0) & "</h1> By: " & info(1) & " Posted in: " & info(2) & " Created on: " & info(3) & "<br>" &_
                     "<img src=""images/" &info(4)&""">" &_
                     "<p>" & info(5) & "</p>"

      info.movenext
    loop until info.eof
  end if 

  conn.close 

%>

</body>

</html> 
4

2 回答 2

1

我使用 ANSI 92 显式连接语法而不是您使用的 ANSI 89 版本重写了您的查询(顾名思义,它在 20 多年前被显式连接取代):

SELECT  projectName, UserName, Category, Created, url, Projectstable.description
FROM    ProjectsTable
        INNER JOIN PictureTable
            ON Projectstable.ID = PictureTable.projectNum 
        INNER JOIN Usertable
            ON UserTable.ID = PictureTable.userNum
            AND ProjectsTable.userNum = Usertable.ID
        INNER JOIN CategoryTable
            ON categoryNum = CategoryTable.ID
ORDER BY Created;

这向我强调了您将结果限制在图片表中的用户与项目表中的用户相同的位置。这是故意的吗?

如果您删除其中一项标准,您会得到所需的结果吗?所以要么

SELECT  projectName, UserName, Category, Created, url, Projectstable.description
FROM    ProjectsTable
        INNER JOIN PictureTable
            ON Projectstable.ID = PictureTable.projectNum 
        INNER JOIN Usertable
            ON UserTable.ID = PictureTable.userNum
            --AND ProjectsTable.userNum = Usertable.ID
        INNER JOIN CategoryTable
            ON categoryNum = CategoryTable.ID
ORDER BY Created;

或者

SELECT  projectName, UserName, Category, Created, url, Projectstable.description
FROM    ProjectsTable
        INNER JOIN PictureTable
            ON Projectstable.ID = PictureTable.projectNum 
        INNER JOIN Usertable
            ON ProjectsTable.userNum = Usertable.ID
            --AND UserTable.ID = PictureTable.userNum
        INNER JOIN CategoryTable
            ON categoryNum = CategoryTable.ID
ORDER BY Created;

为了进一步了解 ANSI 89 与 ANSI 92 连接语法,Aaron Bertrand在他的坏习惯中写了一篇很棒的文章来踢系列。

于 2013-10-08T12:06:15.593 回答
1

答案实际上是数据库本身的错误。更尖锐的是,表之间的链接不正确。SQL 语句可能已过时,但并未导致错误。

于 2013-10-08T23:59:43.323 回答