【问题标题】:Creating a mysql query syntax with JOINING tables使用 JOINING 表创建 mysql 查询语法
【发布时间】:2012-09-03 21:50:31
【问题描述】:

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

我有 4 个表(点赞、关注、评论、用户)

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

点赞

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 cmets "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。

【问题讨论】:

    标签: php mysql sql join syntax


    【解决方案1】:

    您当前执行三个单独查询的方法与任何方法一样好;您可以使用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 上查看。

    【讨论】:

    • 非常感谢您帮助我,我想知道如果您能告诉我如何添加 1 个表格,是否不会太麻烦(我已编辑在 idusers 旁边添加 idbusinessfollow 表中。如果#4 在#1 之后(在业务表中)。我是否需要另一个 UNION ALL 才能拥有 idbusiness?
    • @andrewliu:我不清楚你希望在这种情况下显示什么。
    • 在我没有idbusiness 列之前,它只是下表中的idusers。但是 idbusiness 与 idusers 不同,所以如果用户想关注一个企业,而不是用户,它会显示 idbusiness。但是由于您编写的原始代码仅显示 idusers,如果用户关注 idbusiness,则它变为空。示例:由于我正在关注 iduser #4,它将填充以显示 #4 正在关注 #2(来自 idusers)和 #1(来自 idbusiness)。这有意义吗?对不起!谢谢!
    • @andrewliu:当idbusinessidusers 都设置在某个记录中,而每个出现在另一个是NULL 的位置时,这是什么意思?
    • 对不起,我删除了那个不应该存在的号码。所以每一行都应该是一个新记录。说是否有按钮,1个用于业务,1个用于用户。用户 (#4) 将按关注业务,因此它将有一个新记录,而我 (#1) 会看到。另外,#4 关注了一个用户,我也会看到,因为我在关注他。一切都很好,我只是想知道添加列的语法是否完全不同?我希望这更有意义?再次感谢!
    猜你喜欢
    • 1970-01-01
    • 2011-05-11
    • 1970-01-01
    • 1970-01-01
    • 2012-08-11
    • 1970-01-01
    • 1970-01-01
    • 2019-11-15
    • 1970-01-01
    相关资源
    最近更新 更多