2013-03-31 45 views
2

背景,你需要知道: 我有两个表 - 一个叫“的UserProfiles”,一个叫“评论” - 没有在“意见”称为“CommentUser”查找字段该表链接到名为'TravellerName'的'userprofiles'中的字段。SQL JOIN + WHERE

用户的头像图片路径(这是/Account/UserProfileAvatar/[TravellerName].jpg)可在名为'UserAvatar'的字段下的'userprofiles'表中找到。

gridview本身使用带有asp:Template的TemplateField,使用Eval然后是Database字段。这是我的意图是,注释部分显示数据的这4个领域:

  1. 用户形象
  2. 的用户名( 'CommentUser')
  3. 标语
  4. 评论身体

我对点2 - 4罚款,但点1是你们进来的地方。

客户端代码如下所示:

<%-- Comments Box --%> 
<asp:GridView ID="GridView2" runat="server" AutoGenerateColumns="False" 
    DataSourceID="CommentsDataSource" Height="167px" Width="325px"> 
    <Columns> 
     <asp:TemplateField HeaderText="Comments"> 
     <ItemTemplate> 
     <div style="background-color:Silver"> 
     <div class="avatar-frame"> 
     <asp:Image runat="server" ImageUrl='<%# Eval("UserAvatar") %>'/> 
     </div> 
     <h1><%# Eval("TagLine")%></h1> 
     <h2><%# Eval("CommentUser")%></h2> 
     <p><%# Eval("CommentBody")%></p> 
     </div> 
     </ItemTemplate> 
     <AlternatingItemTemplate> 
     <div style="background-color:White"> 
     <div class="avatar-frame"> 
     <asp:Image ID="Image1" runat="server" ImageUrl='<%# Eval("UserAvatar") %>'/> 
     </div> 
     <h1><%# Eval("TagLine")%></h1> 
     <h2><%# Eval("CommentUser")%></h2> 
     <p><%# Eval("CommentBody")%></p> 
     </div> 
     </AlternatingItemTemplate> 

     </asp:TemplateField> 
    </Columns> 

</asp:GridView> 

<asp:SqlDataSource ID="CommentsDataSource" runat="server" 
    ConnectionString="<%$ ConnectionStrings:BookMeetConnString %>" 
    ProviderName="<%$ ConnectionStrings:BookMeetConnString.ProviderName %>" 
    SelectCommand="SELECT comments.CommentUser, comments.TagLine, comments.CommentBody, comments.BookID, userprofiles.TravellerName, 
    userprofiles.AvatarURL FROM userprofiles INNER JOIN comments ON 
    userprofiles.[TravellerName] = comments.[CommentUser] WHERE ([BookID]= ?)"> 
    <SelectParameters> 
     <asp:QueryStringParameter Name="?" QueryStringField="ID" /> 
    </SelectParameters> 
</asp:SqlDataSource> 
<%-- End of Comments Box --%> 

正如你所看到的,我做了一个位散列了查询的(我有我需要做一个JOIN一个粗略的想法,但我知道绝对没有任何有关连接SQL)。

我查询的逻辑结构将是这样的:

  1. SELECT comments.CommentUser,comments.TagLine,comments.CommentBody (这是在评论表所需要的文本字段)
  2. 为每个已评论的用户从'userprofiles'中检索UserAvatar
  3. 仅显示该特定bookid的注释(SQL查询的最后部分将为WHERE([BookID] =?)

我希望你明白我所设想的查询是什么?

编辑: '的BookID' 的数据类型是一个访问查找(通过查找向导创建)。所有表格都是通过Microsoft Access创建的。就字段的实际数据类型而言,就我所知,Access自动将“数字”数据类型分配给所有查找。查找查询本身是从表'注释'中的'书签'到'书签'表中的'ID'。

+2

[This](http://www.codeproject.com/Articles/33052/Visual-Representation-of-SQL-Joins)可以帮助你。 –

+0

您是否收到错误?你应该提到'BookId'列所属的表名。 .. Where(TableName。[BookID] =?) – Arbaaz

+0

如果您发布表格的快照,我们会更容易理解这个问题 – Arbaaz

回答

1

我对ASP.Net语法并不熟悉,但似乎在实际提取的数据中存在一些混淆。

这是您的SQL查询:

SELECT comments.CommentUser, 
     comments.TagLine, 
     comments.CommentBody, 
     comments.BookID, 
     userprofiles.TravellerName, 
     userprofiles.AvatarURL 
    FROM userprofiles 
     INNER JOIN comments 
      ON userprofiles.[TravellerName] = comments.[CommentUser] 
    WHERE ([BookID] = ?) 

然而,以获取头像URL,您可以使用:

ImageUrl='<%# Eval("UserAvatar") %> 

,而不是:

ImageUrl='<%# Eval("AvatarURL") %> 

所以,这是它? UserAvatarAvatarURL

+0

它是AvatarURL,UserAvatar是'comments'表中的单独字段,它是查找'userprofiles'表中的'UserAvatar'字段 – adaam