Php 在嵌套的foreach循环中使用嵌套查询
好吧,在我的头撞在墙上大约两个小时后,我需要帮助。我有一个查询,根据用户的“关注者”获取“评论”。追随者有一个唯一的id,可以说只是为了方便使用,他们的id是4和5。查询返回所有跟随者,因此可能不止两行。该查询为执行该查询的每个“跟随者”创建一个foreach。然后,该查询需要创建一个fetch_assoc(),以便稍后在页面上调用数据。我现在有代码的方式是,它只显示跟随者4的帖子,而不是5的帖子。我曾尝试使用计数器来附加变量名,这样它们就不会每次都被覆盖,但这并没有帮助。非常感谢Php 在嵌套的foreach循环中使用嵌套查询,php,mysql,sql,loops,Php,Mysql,Sql,Loops,好吧,在我的头撞在墙上大约两个小时后,我需要帮助。我有一个查询,根据用户的“关注者”获取“评论”。追随者有一个唯一的id,可以说只是为了方便使用,他们的id是4和5。查询返回所有跟随者,因此可能不止两行。该查询为执行该查询的每个“跟随者”创建一个foreach。然后,该查询需要创建一个fetch_assoc(),以便稍后在页面上调用数据。我现在有代码的方式是,它只显示跟随者4的帖子,而不是5的帖子。我曾尝试使用计数器来附加变量名,这样它们就不会每次都被覆盖,但这并没有帮助。非常感谢 $sqlb
$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'];
}
}
}
您必须将这两个查询合并为一个查询。但是我的SQL不是很好。
也许其他人能帮上忙
您必须将这两个查询合并为一个查询。但是我的SQL不是很好。
也许其他人能帮上忙。您分配$i,然后在foreach中增加$i,但您从不将$i用于任何其他用途,我不确定该计数器应该做什么。我不确定为什么要为$fnub的值指定第二个变量,为什么不每次都使用$fnub呢?稍后您将使用(我们只能假设是)一个空$num变量并在$fnum前面加上它-我不知道为什么-甚至为什么您必须为num行分配任何内容,只需使用if中的函数,因为它看起来是您使用$num.$fnum的唯一实例
您可以将最后一个foreach完全取出,并将该循环的内容移动到之前的while中,因为它们都在重复相同的数据,只需分配值,然后将$feed['comment']回送到那里,然后它将移动指针并自行准备下一个值。您分配$i,然后你在foreach中增加$i,但是你从不在其他任何地方使用$i,我不确定计数器应该做什么。我不确定为什么要为$fnub的值指定第二个变量,为什么不每次都使用$fnub呢?稍后您将使用(我们只能假设是)一个空$num变量并在$fnum前面加上它-我不知道为什么-甚至为什么您必须为num行分配任何内容,只需使用if中的函数,因为它看起来是您使用$num.$fnum的唯一实例
您可以将最后一个foreach完全取出,并将该循环的内容移动到之前的while中,因为它们都在重复相同的数据,只需分配值,然后将$feed['comment']返回到那里,然后它将移动指针并自行准备下一个值。您应该真正清理代码。无用的循环,任务在那里。您正在sql查询中选择myfriend_ID,但使用myfollower_ID。可能$follower['myfollower_ID']来自其他任何地方。好的,我打算在找到如何使其工作的方法后,您看到的$i是在添加$result和$sql时留下的,就像我尝试使用$fnum和$num一样。在向stackoverflow发布某些内容时,将代码减少到最低限度是一种很好的礼仪,这样人们就不必浪费时间消除所有垃圾<例如,code>$i在这里是完全不相关的。你应该真正清理你的代码。无用的循环,任务在那里。您正在sql查询中选择myfriend_ID,但使用myfollower_ID。可能$follower['myfollower_ID']来自其他任何地方。好的,我打算在找到如何使其工作的方法后,您看到的$i是在添加$result和$sql时留下的,就像我尝试使用$fnum和$num一样。在向stackoverflow发布某些内容时,将代码减少到最低限度是一种很好的礼仪,这样人们就不必浪费时间消除所有垃圾<例如,code>$i在这里是完全不相关的。是的,它太草率了,但是$i应该用于附加其他变量,但它不起作用,所以我把它取了出来,只是我忘了删掉一些东西,比如$i和$fnum,它们大多只是实验。我想说的是,如果你把它清理干净,可能会更容易发现问题所在。现在很难读懂foreach的参数,在结尾用s命名相同的东西,然后在后面再次使用这些名称,等等。这使得我们很难记住所有的东西是什么,所有的东西都应该放在哪里,等等。是的,它很草率,但是$i应该用于附加其他变量,它不起作用,所以我把它拿出来,除了我忘了删掉一些东西,比如$I和$fnum,它们大部分都只是实验。我想说的是,如果你把它清理干净,可能会更容易发现问题所在。现在很难读懂foreach的论点,因为你在结尾用s来命名相同的东西,然后再使用这些名字,等等。这使得你很难记住所有的东西是什么,应该放在哪里,等等。
$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'];
}
}
}