在 foreach 循环中的 if 语句中的 while 循环...无法正常工作

Posted

技术标签:

【中文标题】在 foreach 循环中的 if 语句中的 while 循环...无法正常工作【英文标题】:While loop within if statement that is within a foreach loop... not working well 【发布时间】:2015-03-14 03:41:12 【问题描述】:

我希望我能很好地解释这一点...我有一个名为 $departments_ids = array (1, 2, 3) 的数组。

对于数组中的每个部门,我需要显示存储在数据库中的 cmets 列表。我想出了这样的事情:

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>
        

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

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

【问题讨论】:

我们能做吗 - 在哪里 (".implode(',', $department_id)." ); 您使用了联接。定义如何加入这些表的命令在哪里? Here goes the code to print each comment - 你不能也显示这段代码吗? echo mysqli_num_rows($data) 用于每次迭代,以确保您得到预期的结果。您还需要添加一些错误检查。 您应该尝试将该查询移出循环。循环内的查询很糟糕。尽可能避免使用它们 【参考方案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。

【讨论】:

【参考方案2】:

我终于弄清楚了问题所在……这是菜鸟的错误:

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

感谢您的帮助!

【讨论】:

以上是关于在 foreach 循环中的 if 语句中的 while 循环...无法正常工作的主要内容,如果未能解决你的问题,请参考以下文章

foreach 循环的迭代问题

java中for each的用法

C#中foreach语句的作用?

在if语句中有两个foreach循环

C#中的foreach循环怎么用?

C# - 带有 if 语句的 Foreach 循环