2014-08-28 3 views
0

MYSQL 쿼리에서 2 개의 LEFT JOIN이있는 배열이 반환되었습니다. 질문 : "아래 코드를 작성하는 다른 방법이 있습니까?" 나는 코드를 얻었지만 어떤 일이 일어날지를 이해하기 위해서는 더 명확한 방법을 원한다.mysql 쿼리의 배열 재정렬

CODE : 난 당신이 중간 배열의 자동 생성에 의존해야한다고 생각하지 않기 때문에 나는 그것을 작성하는 것이 좋습니다 방법

$result = array(); 
    while ($resultArr = mysqli_fetch_assoc($booksAndAuthors)) { 
     $result[$resultArr['book_id']] ['book_name'] = $resultArr['book_title']; 
     $result[$resultArr['book_id']] ['author'][] = $resultArr['author_name']; 
     print_r($result); 
    } 
+0

아마도 'print_r'을 루프 안에 넣고 싶지 않을 것입니다. 전체 루프가 완료되면이를 인쇄해야합니다. – Barmar

+0

귀하의 질의를 게시하십시오. 이것은 아마도 GROUP 및 GROUP_CONCAT로 해결할 수 있습니다. – Tom

+0

@Tom 그가'GROUP_CONCAT'을 사용한다면, 그는 fetch 루프에서'explode()'를 사용하여 그것을 배열로 바꿀 필요가 있습니다. 그의 코드가 더 좋습니다. – Barmar

답변

0

extract() 함수를 사용하면 결과의 데이터를 변수로 만들 수 있습니다. 아래 예제를 함수 안에 넣었으므로 로컬 변수가됩니다.

function getBooksAndAuthors($queryResult) 
{ 
    while ($data = mysqli_fetch_assoc($queryResult)) 
    { 
    extract($data); 
    $BooksAndAuthors[$book_id] = array('book_name' => $book_title, 
             'author' => $author_name); 
    } 
    return $BooksAndAuthors; 
} 

이렇게하면 코드를 훨씬 쉽게 읽을 수 있습니다. 물론 데이터베이스 테이블에있는 컬럼을 알아야합니다. 나는 또한 저자를 위해 여분의 '[]'을 빠뜨렸다.

+0

이것은 작성자 배열을 만들지 않고 그룹의 마지막 작성자 만 반환합니다. – Barmar

0

가 여기에 있습니다.

$result = array(); 
while ($row = mysqli_fetch_assoc($booksAndAuthors) { 
    $bookid = $row['book_id']; 
    if (!isset($result[$bookid])) { 
     # First time we see this book, create a result for it 
     $result[$bookid] = array('book_name' => $row['book_title'], 
           'author' => array()); 
    } 
    # add this author to the result entry for the book 
    $result[$bookid]['author'][] = $row['author_name']; 
} 

본질적으로 동일하지만 논리적으로도 명확합니다.

+0

고마워요!이 점이 분명합니다. – noSpoon