while循环内的if语句循环...不能正常工作

时间:2015-01-15 16:49:51

标签: php arrays mysqli

我希望我能解释清楚......我有一个名为$ departments_ids = array(1,2,3)的数组。

对于数组中的每个部门,我需要显示存储在数据库中的注释列表。我想出了类似的东西:

foreach ($departments_ids as $department_id) {

$query = "SELECT page_posts.post_id, page_posts.post, page_posts.post_date_time, 
users.profile_type_id, users.first_name, users.last_name, users.picture ".
"FROM page_posts ".
"INNER JOIN users ".
"USING (user_id) ".
"WHERE dep_id = $department_id ".
"ORDER BY post_date_time ASC";

$data = mysqli_query($dbc, $query);

     if(mysqli_num_rows($data) != 0) {
         while ($row = mysqli_fetch_array($data)){
         Here goes the code to print each comment 
         }
     }
     else {
        <p> Sorry, there are no comments yet. Don\'t  
        be shy, be the first one to post!</p>
        }
}

(注意:我省略了部分代码以简化说明)

代码效果很好,问题是它只打印每个部门的第一个评论而不是存储在数据库中的所有评论。 这就像代码只为每个部门读取一次,然后移动到下一个部门。 如果我理解这一点,我相信一旦它遇到if语句并且看到有多个注释它应该继续读取while语句,而while语句应该处理所有注释,但由于某种原因它不是工作。我读到了有类似问题的人,但仍然无法弄清楚为什么它不起作用。

2 个答案:

答案 0 :(得分:1)

你可以试试这个:

$query = "SELECT page_posts.post_id, page_posts.post, page_posts.post_date_time, users.profile_type_id, users.first_name, users.last_name, users.picture ";
$query .= "FROM page_posts INNER JOIN users USING (user_id) WHERE 1=1 AND";
$query .= "(";
foreach ($departments_ids as $department_id) {
    $query .= " dep_id=$department_id OR ";
}
$query .= ")";
$query .= " ORDER BY post_date_time ASC";

$data = mysqli_query($dbc, $query);
if(mysqli_num_rows($data) > 0) {
    while ($row = mysqli_fetch_array($data)){
        /*** Here goes the code to print each comment  */
    }
} else {
    echo "<p> Sorry, there are no comments yet. Don\'t be shy, be the first one to post!</p>";
}

编辑:

$query .= " dep_id=$department_id OR ";

是1还是2或3。

答案 1 :(得分:0)

我终于找到了问题......这是一个新手的错误:

我有2 $查询相互冲突...我有1个查询查找注释然后另一个查询查找对这些查询的响应...当我删除第二个查询只是为了测试代码我在我的问题中提供的代码工作得很好;因此,我将第二个查询更改为$ query2 ...问题已解决。

感谢您的帮助!