我需要查询MySQL表以获取名称列表,然后根据名称列表,查询与之关联的报告。这是我的代码:
//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 :(得分:1)
出于某种原因,我不能对你的问题发表评论,所以我会发一个答案。看起来你有某种一对一的索引问题。
正如你所看到的那样,“比尔的叙事”正在与鲍勃一同印刷,“鲍勃的叙述”正在与汤姆一起印刷。你也没有与Bill的叙述,你只有一个索引4的叙述。但是,既然你没有真正使用索引来做任何查询,它可能是两件事之一:
1)表中的数据未正确存储。
2)您正在进行的查询未返回您期望的内容。
对于两者,尝试运行您在mysql代码中发布的确切查询,并查看数据是否符合您的预期。另外,尝试添加更多回声语句,例如$people_id
和$people_name
。并回显创建$query_report
的第二个sql语句,确保它符合您的预期。
最后,确保通过打印始终显示的内容或在现有echo语句中添加引号来输入嵌套的while循环:
echo "'" . $report_narr . "'";
这样你知道你至少进入了循环并且查询返回了结果。否则,您的数据库可能不会按您认为的那样排列。
答案 1 :(得分: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'];
}
答案 2 :(得分:0)
好吧,我对此没有任何解释 - 我从零开始,它起作用了。谢谢大家的帮助!