【发布时间】: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)用于每次迭代,以确保您得到预期的结果。您还需要添加一些错误检查。 -
您应该尝试将该查询移出循环。循环内的查询很糟糕。尽可能避免使用它们