首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >嵌套的While循环for mysql_fetch_array没有像我预期的那样工作

嵌套的While循环for mysql_fetch_array没有像我预期的那样工作
EN

Stack Overflow用户
提问于 2011-11-13 17:42:32
回答 3查看 2.1K关注 0票数 0

我正在尝试为我的网站制作feed系统,其中我使用mysql_fetch_array系统从数据库中获取数据,并为mysql_fetch_array创建了一个while循环,在该循环中,我再次重复了相同的事情,另一个while循环,但问题是嵌套的while循环只执行一次,并且不重复行……这是我用过的一些函数和面向对象的代码,但是你会明白重点是什么!我想到了一个替代方案,但还没有尝试过vaz,我只想用这种方式,即使用for循环而不是while循环,这可能会起作用……

代码语言:javascript
复制
public function get_feeds_from_my_friends(){
    global $Friends;
    global $User;
    $friend_list = $Friends->create_friend_list_ids();
    $sql = "SELECT feeds.id, feeds.user_id, feeds.post, feeds.date FROM feeds WHERE feeds.user_id IN (". $friend_list. ") ORDER BY feeds.id DESC";
    $result = mysql_query($sql);
    while ($rows = mysql_fetch_array($result)) {
            $id = $rows['user_id'];
            $dp = $User->user_detail_by_id($id, "dp");
            $user_name = $User->full_name_by_id($id);
            $post_id = $rows['id'];

            $final_result = "<div class=\"sharedItem\">";
            $final_result .= "<div class=\"item\">";
            $final_result .= "<div class=\"imageHolder\"><img src=\"". $dp ."\" class=\"profilePicture\" /></div>";
            $final_result .= "<div class=\"txtHolder\">";
            $final_result .= "<div class=\"username\"> " . $user_name  . "</div>";
            $final_result .= "<div class=\"userfeed\"> " . $rows['post'] . "</div>";
            $final_result .= "<div class=\"details\">" . $rows['date'] . "</div>";
            $final_result .= "</div></div>";
            $final_result .= $this->get_comments_for_feed($post_id);
            $final_result .= "</div>";

            echo $final_result;
        }
}

public function get_comments_for_feed($feed_id){
    global $User;

    $sql = "SELECT feeds.comments FROM feeds WHERE feeds.id = " . $feed_id . " LIMIT 1";
    $result = mysql_query($sql);
    $result = mysql_fetch_array($result); 
    $result = $result['comments'];
    $comment_list = get_array_string_from_feild($result);

    $sql = "SELECT comment_feed.user_id, comment_feed.comment, comment_feed.date FROM comment_feed ";
    $sql .= "WHERE comment_feed.id IN(" . $comment_list . ") ORDER BY comment_feed.date DESC";
    $result = mysql_query($sql);
    if(empty($result)){ return "";}
    else {
        while ($rows = mysql_fetch_array($result)) {
                $id = $rows['user_id'];
                $dp = $User->user_detail_by_id($id, "dp");
                $user_name = $User->full_name_by_id($id);
                return "<div class=\"comments\"><div class=\"imageHolder\"><img src=\"". $dp ."\" class=\"profilePicture\" /></div>
                            <div class=\"txtHolder\">
                                <div class=\"username\"> " . $user_name  . "</div>
                                <div class=\"userfeed\"> " . $rows['comment'] . "</div>
                                <div class=\"details\">" . $rows['date'] . "</div>
                            </div></div>";

        }       

    }
}
EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2011-11-13 17:54:32

这是因为您使用的是return,它会停止函数的进一步执行。你想要做的是

代码语言:javascript
复制
//...
else {
    $out = '';
    while ($rows = mysql_fetch_array($result)) {
            $id = $rows['user_id'];
            $dp = $User->user_detail_by_id($id, "dp");
            $user_name = $User->full_name_by_id($id);
            $out .= "<div class=\"comments\"><div class=\"imageHolder\"><img src=\"". $dp ."\" class=\"profilePicture\" /></div>
                        <div class=\"txtHolder\">
                            <div class=\"username\"> " . $user_name  . "</div>
                            <div class=\"userfeed\"> " . $rows['comment'] . "</div>
                            <div class=\"details\">" . $rows['date'] . "</div>
                        </div></div>";

    }
    return $out;

}
票数 0
EN

Stack Overflow用户

发布于 2011-11-13 17:49:02

内部循环在循环的第一次迭代中返回。你确定你应该循环吗?如果你确定它总是第一行,为什么不直接抓住第一行呢?

票数 0
EN

Stack Overflow用户

发布于 2012-02-21 20:24:12

永远不要使用嵌套的while循环,它不会给出您期望的结果。按照以下方式操作,就像我在此脚本中所做的那样:

代码语言:javascript
复制
<?php 
include('dbconnect.php');

$query = "SELECT * FROM tiles_categories" . " LIMIT 0, 3" ;
$result = mysql_query($query) or die(mysql_error()); 

while($row = mysql_fetch_array($result)) {  $category_id = $row["cat_id"] ;
echo "<div class='product'>";
            echo "<h2 style='padding-bottom:10px; color:#6F0D00;'>". $row['cat_name'] . "</h2>";
            gettiles($category_id);
        echo"</div>";
    }

    function gettiles($category_id) {
        $tiles_query = "SELECT * FROM tiles_info where cat_id = '".$category_id."'";
        $result = mysql_query($tiles_query) or die(mysql_error());
        while($row_tiles = mysql_fetch_array($result)) {
            echo "<div align='center' style='float:left; width:100px; margin:0px 35px 0px 0px;'>";

            echo "</div>";
        }
    }
?>
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/8110761

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档