Я пишу приложение поверх CodeIgniter, чтобы лучше организовать свою коллекцию электронных книг.Я почти закончил, но я понимаю, что на моей странице просмотра слишком много запросов - по два на книгу - чтобы получить их информацию.Очевидно, что это не совсем идеально, особенно если учесть, что в эту систему нужно добавить около 1000 книг.
В настоящее время у меня есть одна функция модели, которая получает все книги (в конечном итоге будет изменена для получения параметров - это следующий шаг) и другой, который получает метаинформацию для каждой возвращенной книги.Вторая функция выполняет два запроса для каждой книги - одну для получения информации в таблице книг, а другую для получения тегов, связанных с книгой.Вот две функции модели:
Получить список книг:
function get_books() {
$this->db->select('isbn')->order_by('title');
$query = $this->db->get('books');
$result = $query->result();
return $result;
}
Получить метаинформацию книги:
function get_book_info($isbn) {
// Grab the book from Amazon
$amazon = $this->amazon->get_amazon_item($isbn);
// Get the book info
$this->db->select('title, publisher, date, thumb, filename, pages');
$query = $this->db->get_where('books', array('isbn' => $isbn));
$bookResult = $query->row();
// Get the book's tags
$this->db->select('tag');
$this->db->from('tags AS t');
$this->db->join('books_tags AS bt', 'bt.tag_id = t.id', 'left');
$this->db->where('bt.book_id', $isbn);
$this->db->order_by('t.tag');
$tagQuery = $this->db->get();
foreach ($tagQuery->result() as $row) {
$tagResult[] = $row->tag;
}
$tagResult = implode(', ', $tagResult);
// Send data
$data = array(
'isbn' => $isbn,
'thumb' => $bookResult->thumb,
'title' => strip_slashes($bookResult->title),
'file' => $bookResult->filename,
'publisher' => strip_slashes($bookResult->publisher),
'date' => date('F j, Y', strtotime($bookResult->date)),
'pages' => $bookResult->pages,
'tags' => $tagResult,
'rating' => $amazon->Items->Item->CustomerReviews->AverageRating,
'raters' => $amazon->Items->Item->CustomerReviews->TotalReviews
);
return $data;
}
Я уверен, что есть способнаписать один или два запроса, которые соберут все записи в объекты, которые я затем смогу отфильтровать, вместо того, чтобы писать два запроса для каждого, но я понятия не имею, с чего начать пытаться написать это.Любые предложения приветствуются.
Большое спасибо, Маркус