【问题标题】:While loop only retrieving one resultWhile 循环只检索一个结果
【发布时间】:2011-09-26 09:00:08
【问题描述】:

更新:似乎仍然无法弄清楚。如果有人可以伸出援手,将不胜感激^^。

我遇到了一个问题,我不确定我的代码哪里出了问题。我有一个“关注”功能,您可以在其中关注不同的注册用户。您关注的用户 ID 存储在数组 (follower_array) 中。它从数组中检索每个成员,但在随后的每个成员中,它不显示所有内容,而是仅显示每个成员的 1 个最新成员。

$broadcastList= "";

if ( $follower_array != "" ) {

  $followArray = explode(",", $follower_array);
  $followCount = count($followArray);   
  $i = 0;
  $broadcastList .= "<table>";

  foreach( $followArray as $key => $value ) {

    $i++;
    $sqlName = mysql_query("
        SELECT username, fullname 
          FROM members 
         WHERE id='$value' 
         LIMIT 1
    ") or die ("error!");

    while ( $row = mysql_fetch_array($sqlName) ) {
      $friendUserName = substr($row["username"],0,12);
    }

    $sqlBroadcast = mysql_query("
        SELECT mem_id, bc, bc_date, device 
          FROM broadcast 
         WHERE mem_id='$value' 
      ORDER BY bc_date ASC 
         LIMIT 50
    ") or die ("error!");

    while ( $bc_row = mysql_fetch_array($sqlBroadcast) ) {
      $mem_id  = $bc_row['mem_id'];
      $bc      = $bc_row['bc'];
      $dev     = $bc_row['device'];
      $bc_date = $bc_row['bc_date'];
      $broadcastList .= "<td><a href='member.php?id=' .$value. ''>
      $friendUserName</a> &bull; $when_bc &bull; Via: $dev <b>$bc</b></td></tr>";
    }
    broadcastList .= "</table>";
  }
}

所以,它会完全检索成员,但不会超过他们最近一次的“广播”。任何见解将不胜感激..谢谢!

【问题讨论】:

  • 编程不是一场比赛,看你能在每一行塞进多少东西。在新行上缩进代码块(特别是如果您打算使用{}'s)并保持您的代码正确缩进。
  • ..对于其他想法不同的人来说,有 perl-golf。
  • 等一下.. 没有比赛?我假设我会为最长的行获得一个 stackoverflow 徽章! :)。抱歉,代码已被编辑为更友好。
  • @Matthew:没有冒犯,但这并没有太大改善。
  • @x3ro:再次编辑。现在这就是它应该看起来的样子,IMO...

标签: php mysql while-loop


【解决方案1】:

我要在黑暗中拍摄:

$broadcastList .= "<td><a href='member.php?id=' .$value. ''>
  $friendUserName</a> &bull; $when_bc &bull; Via: $dev <b>$bc</b></td></tr>";

那行几乎错过了一个起始“tr”元素。您确定内容没有仅仅因为错误的 html 标记而显示吗?

还有:

broadcastList .= "</table>";

你错过了那里的 $ ;)。

我不知道这是否可以解决它甚至可以帮助您;但我当然希望如此:)。或者;您还可以检查 HTML 源代码以查看条目是否真的不存在(参见第一条注释)。

【讨论】:

    【解决方案2】:

    这是发生了什么:

    while( $row = some_next_result_function() ){
        $result = $row["thing"];
    }
    

    每次都会覆盖$result,所以你只会得到最后一个结果。

    您需要创建一个列表并附加到它。

    【讨论】:

    • 我有一种下沉的感觉,就是这么简单。谢谢!
    • 不幸的是,我更改了 $row 结果,但仍然只返回 1 个结果。
    • 你故意检索 1 个朋友用户名。你确定你有不止一个广播给那个用户吗?
    • 是的,我为每位用户输入了 10 次广播的虚拟数据。
    猜你喜欢
    • 1970-01-01
    • 2012-11-15
    • 2021-09-24
    • 2020-04-28
    • 2013-10-27
    • 2014-07-17
    • 1970-01-01
    • 2012-09-28
    • 1970-01-01
    相关资源
    最近更新 更多