0

我无法获取一些数据....我想知道是否有人可以帮助我,

我有 4 个表(喜欢、关注、评论、用户)

我希望能够在用户喜欢/评论/关注/等时填充我的页面......(如果用户正在关注特定用户)。

喜欢

idlikes   idusers    iditem
  1          1          5
  2          2          4
  3          2          22

跟随

idfollow   idusers_follower   idusers    idbusiness
  1              1               2           
  2              1               3           
  3              1               4           
  4              4               2           
  5              4                           1

评论

idcomments   idusers    text
   1            1       asfd
   2            2       safd

用户

idusers
   1
   2
   3
   4

例如,如果我是 id 用户 #1,我正在关注用户 #2、#3、#4

我的页面将填充以显示:

  • #2 喜欢项目 #4、#22。
  • #4 在 #2 之后(因为我在 #4 之后,这就是它显示的原因)
  • #2 评论“safd”

我不确定显示这个的最佳方式是什么?我目前有多个函数一次查询表,并且我正在将数组合并在一起?或者我应该使用连接表?我现在正在尝试...

获取我关注的用户。

$feeds = new feed();
$meID = 1;
$query = "SELECT idusers FROM follow WHERE iduserse_follower = ?";

$users = $dbh -> prepare($query);
$users -> execute(array($meID));

while($following = $users -> fetch(PDO::FETCH_ASSOC)){
      $follow = $following['idusers']; //This will get all of useres I'm following
      $populate = $feeds->feed_all($follow); // from function
}

询问

class feed()
{
     public function feed_all($idusers)
     {
         // SYNTAX HELP //////////////////////
           $query = "SELECT 
           f.idusers_follower, 
           f.idusers, 
           l.iditem, 
           c.text 
           FROM follow f, users u 
           JOIN likes l 
           ON l.idusers = f.idusers 
           JOIN comment c
           ON c.idusers = f.idusers
           WHERE f.idusers_follower = ? AND f.idusers_follower = l.idusers AND f.idusers_follower = c.idusers AND f.idusers = u.idusers"

           $pop = $dbh->prepare($query);
           $pop ->execute($idusers);

           // while loop to return value
    while($row = $pop -> fetch(PDO::FETCH_ASSOC))
    {
        $feed_data[]=$row;
    }
    return $feed_data;
     }
}

这就是我卡住的地方。:( 我什至不确定我的陈述是否正确?

++++++++++ 编辑:++++++++++++

我已编辑添加idbusiness

现在因为我关注#4,它也会显示#4 正在关注#1。

4

1 回答 1

4

您当前执行三个单独查询的方法与任何方法一样好;您可以使用 将它们组合成一个结果集UNION,如果您想按某个字段(例如活动时间戳)对组合结果进行排序和/或限制组合结果,这将非常有用:

  SELECT idusers, 'likes' AS what, likes.iditem AS detail
  FROM   likes JOIN follow USING (idusers)
  WHERE  follow.idusers_follower = 1

UNION ALL

  SELECT f1.idusers, 'follows', f2.idusers
  FROM   follow f1 JOIN follow f2 ON f1.idusers = f2.idusers_follower
  WHERE  f1.idusers_follower = 1

UNION ALL

  SELECT idusers, 'commented', comment.text
  FROM   comment JOIN follow USING (idusers)
  WHERE  follow.idusers_follower = 1

sqlfiddle上查看。

于 2012-09-03T22:14:21.180 回答