【问题标题】:Pull data from one table and check against a different table then show match从一个表中提取数据并检查另一个表,然后显示匹配
【发布时间】:2011-09-11 08:56:48
【问题描述】:

情况是这样的。我在网站的其他地方到处都加入了,一切都很好,只是这个让我发疯的小问题。这可能很简单,我只是错过了一些东西。

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

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

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

Table2 = 博客(使用 BlogID 作为主 ID) - 它有 BlogID、WriterID blogtitle、blogtext、blogdate 等作为行

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

解释 用户已登录。$LoggedInUser = 登录时已登录的人员的 ID。SESSION

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

示例

  1. User1 已登录并创建 BlogA。
  2. User2 登录并在博客页面顶部看到它。
  3. User2 想要开始关注此博客。
  4. 用户 2 单击链接。它将上面的信息插入到表 3 中。
  5. User2 然后刷新页面。现在而不是说 StartFollowing 上面写着 StopFollowing。

问题:所以我无法弄清楚。

登录后,用户会在页面上看到所有博客的列表-博客页面(来自表 2)。每个博客标题旁边都有一个链接,上面写着 StartFollowing(已登录的用户未关注此博客)或 StopFollowing(已登录的用户正在关注此博客)。我怎样才能做到这一点。无论我尝试什么,我要么只显示他们已经关注的登录用户的博客,要么我只看到正在关注的博客(表 3)。

【问题讨论】:

  • 看起来这可能是您的 MySQL 查询的问题,但没有看到它或任何代码,这有点难以判断。
  • 我将在Table1 中有一个名为following 的列,其中包含用户关注的博客IDs 的序列化数组,然后在循环出list of all blogs-Blog Page 上的博客时进行检查那个数组。
  • “没有一个行使用相同的名称”我以前从未听说过有名称的行
  • Lawrence Cherone - 这将是最简单的方法。但不是它需要做的方式。我开始认为这是做不到的。代码中有这样的东西吗? :) 但是感谢您的建议。
  • 还没有接受者。它基本上是一个先进的 Twitter 关注系统。有谁知道怎么做。

标签: php mysql join union


【解决方案1】:

这是我的看法:

首先,你说

登录用户想要开始关注博客。用户点击 开始关注博客链接。这会发送要插入到 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 中使用联接,则可以更好地执行此操作。如果您向表结构提供代码,则可以显示查询。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-04-07
    • 1970-01-01
    • 2019-08-15
    • 2014-01-04
    • 2021-06-12
    • 2022-11-18
    相关资源
    最近更新 更多