2011-03-11 5 views
0

MySQL 테이블을 쿼리하여 그 이름 목록을 기반으로 쿼리 목록을 묶은 다음 이름 목록을 가져와야합니다.중첩 된 while 루프가 첫 번째 결과를 건너 뜁니다.

1Bill

2Bob "빌의 이야기"

3Tom "밥의 이야기"

4 : 그것이 내가이 얻을, 출력 할 때

//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); 
    } 
} 
?> 

: 여기 내 코드입니다 "Tom 's Narrative"

중첩 루프에서 Bill의 쿼리를 건너 뛰는 이유에 대한 의견이 있으십니까?

+0

아마 테이블 데이터 자체에 문제가 있습니까? – GWW

+0

나는 그렇게 생각하지 않는다 - 나는 다른 방식으로 데이터를 꺼내는 다른 페이지를 가지고 있지만 잘 작동하는 동일한 쿼리를 가지고있다. – thebarless

+0

이상하게 들리면 코드가 소리가납니다. 그러나 어쩌면 나는 뭔가를 놓치고있다. – GWW

답변

0

음, 나는 처음부터 시작해서 효과가있었습니다. 도와 주셔서 감사합니다.

1

귀하의 질문에 어떤 이유로 답변을 게시하지 않습니다. 너는 off-by-one 색인 문제의 어떤 종류가있는처럼 본다.

"Bill 's Narrative"는 Bob과 함께 인쇄되고 "Bob 's Narrative"는 Tom과 함께 인쇄됩니다. 또한 Bill과 이야기가 없으며 색인 4를 사용하는 서술 만 있습니다. 그러나 색인을 사용하여 실제로 검색어를 사용하지 않으므로 다음 두 가지 중 하나 일 수 있습니다.

1) 데이터 테이블이 올바르게 저장되지 않습니다.

2) 수행중인 쿼리가 예상 한 결과를 반환하지 않습니다.

두 경우 모두 mysql에서 코드에 게시 한 정확한 쿼리를 실행하고 데이터가 예상 한 것인지 확인하십시오. 또한 $people_id$people_name과 같은 echo 문을 추가하십시오. $query_report을 생성하는 두 번째 SQL 문을 반향 시키십시오. 예상되는 내용인지 확인하십시오.

마지막으로, 당신은 항상 기존의 echo 문에 따옴표를 추가 위로 또는 표시됩니다 뭔가를 인쇄하여 루프 동안 중첩 입력되어 있는지 확인하십시오 :

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

답장을 보내 주셔서 감사합니다. 1 인당 수백 건의 보고서가 있기 때문에 조인을 할 수 없습니다 (조인에 대해 배울 점이없는 한). 제 생각에 가장 쉬운 방법은 people 테이블에서 사람들을 불러 와서 첫 번째 while 루프를 거치면서 그 사람에 대한 보고서를 가져 오는 것입니다. 이 작업을 수행하는 더 좋은 방법이 있습니까? – thebarless

+1

수천 개의 보고서가있는 경우 루프를 사용하여이 작업을 수행하지 않는 것이 더 중요합니다. 인덱스 된 컬럼 등으로 테이블을 적절하게 구조화했다면, 조인은 벌금이 부과되고, 쿼리에 연결된 PHP 루프보다 더 효율적입니다. – Chris

관련 문제