2015-01-15 117 views
3

我希望我可以解释这一点......我有一个名为$ departments_ids = array(1,2,3)的数组。虽然循环内的if语句是在foreach循环内......运行不正常

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

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语句应该处理所有的评论,但由于某种原因,它是不工作。我阅读了有关类似问题的人,但仍然无法弄清楚为什么它不起作用。

+0

我们可以做 - 在哪里(“.implode(',',$ department_id)。”); – 2015-01-15 16:54:47

+0

您使用了连接。定义如何加入这些表的命令在哪里? – 2015-01-15 16:55:21

+1

'这里是打印每个评论的代码 - 你不能显示这个代码吗? – raina77ow 2015-01-15 16:55:21

回答

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

0

我终于想通了这个问题...这是一个菜鸟的错误:

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

感谢您的帮助!