How can I get the entire result set of a query here?

Froggie114

New Member
I've written the following CodeIgniter model function to grab and iterate through a MySQL query result. \[code\]function get_book_info() {/* * SELECT b.isbn, b.title, b.publisher, b.date, b.thumb, b.filename, b.pages, t.tag * FROM books AS b * INNER JOIN books_tags AS bt ON b.isbn = bt.book_id * INNER JOIN tags AS t ON bt.tag_id = t.id * ORDER BY b.title, t.tag */$this->db->select('b.isbn, b.title, b.publisher, b.date, b.thumb, b.filename, b.pages, t.tag');$this->db->from('books AS b');$this->db->join('books_tags AS bt', 'b.isbn = bt.book_id', 'inner');$this->db->join('tags AS t', 'bt.tag_id = t.id', 'inner');$this->db->order_by('b.title, t.tag');$query = $this->db->get();$result = $query->result();$counter = '';$record = $meta = $tags = array();foreach ($result as $book) { // If this is the first appearance of this book if ($counter != $book->isbn) { // If the meta array already exists if ($meta) { // Add the combined tag string to the meta array $meta['tags'] = implode(', ', $tags); // Add the meta array $record[] = $meta; // Empty the tags array $tags = array(); } // Reset the counter $counter = $book->isbn; // Grab the book from Amazon $amazon = $this->amazon->get_amazon_item($book->isbn); // Collect the book information $meta = array( 'isbn' => $book->isbn, 'title' => strip_slashes($book->title), 'publisher' => strip_slashes($book->publisher), 'date' => date('F j, Y', strtotime($book->date)), 'thumb' => $book->thumb, 'filename' => $book->filename, 'pages' => $book->pages, 'rating' => $amazon->Items->Item->CustomerReviews->AverageRating, 'raters' => $amazon->Items->Item->CustomerReviews->TotalReviews ); // Add the tag to the tags array $tags[] = $book->tag; } else { // All we need is the tag $tags[] = $book->tag; }}return $record;}\[/code\]The code works for all but the last book - it always misses the last row. I can see why it does this, but I don't know how to fix it. Here's something I tried, but I still don't get the last book included in the $record array.\[code\]function get_book_info() { /* * SELECT b.isbn, b.title, b.publisher, b.date, b.thumb, b.filename, b.pages, t.tag * FROM books AS b * INNER JOIN books_tags AS bt ON b.isbn = bt.book_id * INNER JOIN tags AS t ON bt.tag_id = t.id * ORDER BY b.title, t.tag */ $this->db->select('b.isbn, b.title, b.publisher, b.date, b.thumb, b.filename, b.pages, t.tag'); $this->db->from('books AS b'); $this->db->join('books_tags AS bt', 'b.isbn = bt.book_id', 'inner'); $this->db->join('tags AS t', 'bt.tag_id = t.id', 'inner'); $this->db->order_by('b.title, t.tag'); $query = $this->db->get(); $result = $query->result(); $counter = ''; $record = $meta = $tags = array(); $count = count($result); $i = 0; foreach ($result as $book) { // If this is not the last row if ($i < $count) { // If this is the first appearance of this book if ($counter != $book->isbn) { // If the meta array already exists if ($meta) { // Add the combined tag string to the meta array $meta['tags'] = implode(', ', $tags); // Add the meta array $record[] = $meta; // Empty the tags array $tags = array(); } // Reset the counter $counter = $book->isbn; // Grab the book from Amazon $amazon = $this->amazon->get_amazon_item($book->isbn); // Collect the book information $meta = array( 'isbn' => $book->isbn, 'title' => strip_slashes($book->title), 'publisher' => strip_slashes($book->publisher), 'date' => date('F j, Y', strtotime($book->date)), 'thumb' => $book->thumb, 'file' => $book->filename, 'pages' => $book->pages, 'rating' => $amazon->Items->Item->CustomerReviews->AverageRating, 'raters' => $amazon->Items->Item->CustomerReviews->TotalReviews ); // Add the tag to the tags array $tags[] = $book->tag; } else { // All we need is the tag $tags[] = $book->tag; } // If this is the last row } else { // If this is the first appearance of this book if ($counter != $book->isbn) { // Grab the book from Amazon $amazon = $this->amazon->get_amazon_item($book->isbn); // Collect the book information $meta = array( 'isbn' => $book->isbn, 'title' => strip_slashes($book->title), 'publisher' => strip_slashes($book->publisher), 'date' => date('F j, Y', strtotime($book->date)), 'thumb' => $book->thumb, 'file' => $book->filename, 'pages' => $book->pages, 'rating' => $amazon->Items->Item->CustomerReviews->AverageRating, 'raters' => $amazon->Items->Item->CustomerReviews->TotalReviews ); // Add the tag to the tags array $tags[] = $book->tag; // Add the combined tag string to the meta array $meta['tags'] = implode(', ', $tags); // Add the meta array $record[] = $meta; } else { // All we need is the tag $tags[] = $book->tag; // Add the combined tag string to the meta array $meta['tags'] = implode(', ', $tags); // Add the meta array $record[] = $meta; } } $i++; } return $record;}\[/code\]Any suggestions? How can I fix this?
 
Back
Top