在嵌套的foreach循环中使用嵌套查询

时间:2011-04-02 05:57:27

标签: php mysql sql loops

好吧,在我的头靠在墙上大约2个小时之后,我需要帮助。我有一个查询,根据用户“关注者”提取“评论”。关注者有一个唯一的id,让我们说只是为了方便使用,他们的id是4和5.查询返回所有关注者,所以可能不仅仅是两行。该查询创建了一个foreach,我想对每个“跟随者”执行此查询。然后,该查询需要创建一个fetch_assoc(),以便稍后可以在页面上调用数据。我现在拥有代码的方式,它只显示来自关注者4的帖子,而不是5.我尝试使用计数器来附加变量名称,这样它们每次都不会被覆盖,但它没有帮助。非常感谢!

$sqlb ="SELECT myfriend_ID FROM friends WHERE my_id = '$myuid'";
$resultb = mysql_query($sqlb,$db);
$numa = mysql_num_rows($resultb);
if($numa)
{
    while(($follower = mysql_fetch_assoc($resultb))) {
        $followers[] = $follower;
    }
}
$i=0;
foreach($followers as $follower)
{
    $i++;
    $fnub = $follower['myfollower_ID'];//this will print 4 and 5
    $fnum = $fnub;

    $sql = "SELECT * FROM usr, feed, course WHERE usr.usr_id = '$fnum' AND 
             feed.usr_id = '$fnum' AND course.usr_id = '$fnum' ORDER BY Feed_ID desc";
    $result = mysql_query($sql,$db);
    $num.$fnum = mysql_num_rows($result);
    if($num.$fnum)
    {
        while(($feed = mysql_fetch_assoc($result))) {
            $feeds[] = $feed;
        }
        foreach($feeds as $feed)
        {
            echo $feed['comment'];
        }
    }
}

2 个答案:

答案 0 :(得分:1)

$sqlb ="SELECT myfriend_ID FROM friends WHERE my_id = '$myuid'";
$resultb = mysql_query($sqlb,$db);
$follower = array();

if(mysql_num_rows($resultb))
{
   while(($follower = mysql_fetch_assoc($resultb))) {
      $fnum = $follower['myfriend_ID'];//what is the column name
      $sql = "SELECT * FROM usr, feed, course WHERE usr.usr_id = '$fnum' AND feed.usr_id = '$fnum' AND course.usr_id = '$fnum' ORDER BY Feed_ID desc";
      $result = mysql_query($sql,$db);
      if( mysql_num_rows($result))
      {
         while(($feed = mysql_fetch_assoc($result))) {
           echo $feed['comment'];
       }
    }
}

您必须将这两个查询合并为一个。但我在SQL方面不太好。 可能还有其他人可以提供帮助。

答案 1 :(得分:0)

你分配$ i,然后你在foreach中增加$ i,但是你从不使用$ i来做任何事情,我不确定那个计数器应该做什么。我不确定你为什么要为$ fnub的值分配第二个变量,为什么不每次只使用$ fnub?稍后你使用(我们只能假设的是)一个空的$ num变量并在其前面添加$ fnum - 我不知道为什么 - 或者为什么你必须为num行分配任何东西,只需使用if中的函数因为它看起来是你使用$ num。$ fnum。

的唯一实例

你可以完全取出你的最后一个foreach并将该循环的内容移动到它之前,因为它们都在迭代相同的数据,只需分配值,然后在那里回显$ feed ['comment'] ,然后它将移动指针,并为您自己准备好下一个值。