2011-03-11 156 views
0

我需要查询MySQL表以获取名称列表,然后根据该名称列表查询与之关联的报表。这里是我的代码:嵌套while循环跳过第一个结果

//query the peoples 

$query_people = mysql_query("SELECT * FROM people ORDER BY people_name ASC") 
while($fetch_people = mysql_fetch_array($query_people)){ 
    $people_id = $fetch_people[people_id]; 
$people_name = $fetch_people[people_name]; 
$query_report = mysql_query("SELECT * FROM report WHERE report_entity = '$people_name'"); 

    // output each person's name 
    echo($people_id.$people_name); 

    //get their reports 
    while($fetch_report = mysql_fetch_array($query_report)){ 
    $report_id = $fetch_report[report_id]; 
    $report_type = $fetch_report[report_type]; 
    $report_narr = $fetch_report[report_narr]; 
    echo($report_narr); 
    } 
} 
?> 

当输出,我得到这个:

1Bill

2Bob “比尔的故事”

3Tom “鲍勃的故事”

4 “汤姆的叙述”

有关为什么它跳过Bill的嵌套循环查询的任何想法?

+0

也许表中的数据有自己的问题吗? – GWW 2011-03-11 04:50:27

+0

我不这么认为 - 我有另一个页面,以不同的方式提取数据,但使用相同的查询工作正常。 – thebarless 2011-03-11 04:54:22

+0

那很奇怪,代码看起来很合理。但也许我也错过了一些东西。 – GWW 2011-03-11 04:56:58

回答

0

那么,我没有解释这一点 - 我从头开始,它的工作。感谢你的帮助!

1

由于某些原因,我无法对您的问题发表评论,因此我会发布一个答案。看起来你有某种索引问题。

正如您看到“Bill的叙述”正在与Bob一起打印,而“Bob的叙述”正在与Tom一起打印。你也没有与比尔的叙述,你只有索引4的叙述。但是,因为你不真的使用索引来做任何查询,它可能是两件事之一:

1)数据在表格没有正确存储。

2)你正在做的查询没有返回你所期望的。

对于这两种情况,尝试运行您在mysql中的代码中发布的确切查询,并查看数据是否符合您的期望。另外,请尝试添加更多回声语句,如$people_id$people_name。并回声创建$query_report的第二个sql语句,确保这是你所期望的。

最后,确保你正在进入嵌套while循环通过打印的东西,总是会出现或添加引号到您现有的回声声明:

echo "'" . $report_narr . "'"; 

至少进入你知道你这样的循环并且查询返回结果。否则,您的数据库可能无法按照您认为的方式进行安排。

1

从我所了解的你不能保证命令mysql语句在事务之外执行。我会使用一个连接,它会比在它们内部使用mysql查询的嵌套循环更快。

$query = " 
    SELECT * FROM `people` 
    JOIN `report` 
    ON `report`.`report_entity` = `people`.`people_name` 
    ORDER BY `people`.`people_name` ASC 
"; 

$result = mysql_query($query); 

while($row = mysql_fetch_array($result)) { 
    echo $row['report_narr']; 
} 
+0

感谢所有的答复。我不能加入(除非我有新的东西了解加入),因为我有每人数百报告;我的想法是最简单的方法是从人员表中获取人员,并在经历第一个while循环的同时获取该人员的报告。有一个更好的方法吗? – thebarless 2011-03-11 14:43:35

+1

如果你有成千上万的报告,更重要的是你不要用循环做这件事。如果你有一个结构合理的索引列表等等,连接会被罚款,并且比php循环更有效地绑定到查询。 – Chris 2011-03-12 07:27:23