从一个表中提取数据并检查另一个表然后显示匹配

时间:2011-09-11 08:56:49

标签: php mysql join union

情况如下。我在网站的其他地方到处都加入,一切正常,只是这一次打嗝让我发疯。它可能很简单,我只是遗漏了一些东西。

这是一个用户可以登录并关注彼此博客的系统。

数据库 每个表都有不同数量的列,没有列使用相同的名称。

Table1 = userdetails(使用ID作为主要ID)

表2 =博客(使用BlogID作为主要ID)   - 它有BlogID,WriterID blogtitle,blogtext,blogdate等作为行

表3 = blogFollowers(使用FollowingBlogID作为主要ID)这是tan; e,它保留关于谁在关注哪些博客的所有信息。   - 它有FollowBlogID,TheBlogID,ImFollowing,FollowOrNot   - FollowOrNot必须为0或1 - 0等于以下1等于不跟随)

说明 用户已登录。$ LoggedInUser =登录时登录的人员的身份.SESSION

登录用户想要开始关注博客。用户单击StartFollowing博客链接。这会将信息发送到Table3中。它创建一个新行(分配一个唯一的id)并插入TheBlogId(与table1中的BlogID相同)ImFollowing(插入LoggedInUser)和FollowOrNot它插入一个0。

示例

  1. User1已登录并创建BlogA。
  2. 用户2登录并在“博客”页面的顶部看到它。
  3. User2想要开始关注此博客。
  4. User2点击该链接。它将上面的信息插入表3中。
  5. User2然后刷新页面。而不是说StartFollowing 它说StopFollowing。
  6. 问题:所以我无法弄明白。

    登录后,用户会在页面上看到所有博客列表 - 博客页面(来自表2)。在每个博客标题旁边都有一个链接,其中显示StartFollowing(登录用户不关注此博客)或StopFollowing(登录用户IS跟随此博客)。我怎样才能实现这一目标。无论我尝试什么,我或者只是显示他们已经关注的登录用户的博客,或者我只看到正在关注的博客(表3)。

1 个答案:

答案 0 :(得分:0)

所以这是我的看法:

首先,你说

  

登录用户想要开始关注博客。用户点击了   开始关注博客链接。这会将信息发送到Table3中。   它创建一个新行(分配一个唯一的id)并插入TheBlogId(是   与 table1 中的BlogID相同)ImFollowing(插入LoggedInUser)和   FollowOrNot它插入一个0。

不应该是 table2 (粗体)。

第二:table3应具有基于blogIduserId的复合主键。只有这样才能合乎逻辑,因为用户可以关注许多博客。

第三次,回答你的问题:

  

无论我尝试什么,我都要显示Logged   在他们已经关注的用户博客中,或者我只看到博客   正在遵循(表3)。

这是一般伪代码:

foreach( $allRowsOfTable2 as $row) { //each row for those blogs being displayed on page.
blogId = $row['blogId'];
blogAuthorId = $row['blogAuthorId'];

  if( blogAuthorId != currentLoggedInUserID ) { //obviously why do you need to follow yourself right? :P
     $sql = "SELECT * from table3 WHERE blogId=`$blogId` AND userId='$currentLoggedInUserID';";
     $result = do_a_database_operation_here;
     if(count($result) >0 ) { //yes he is following the blog
          //display the "unfollow" link
     }
     else {
          //display the "follow" link
     }
  }
}

PS:如果可以在sql中使用连接,则可以更好地执行此操作。如果您向表结构提供代码,则可以显示查询。