2011-03-11 162 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