Фильтрация результатов с CodeIgniter - PullRequest
1 голос
/ 18 сентября 2011

У меня две таблицы книг и авторов.Используя CodeIgniter, я бы хотел, чтобы пользователи могли фильтровать результаты - например, показывать результаты, где author_id = 'x' и book_lang = 'y' и publishing_year = '2000'.Значения критериев фильтра поступают от пользователя через раскрывающиеся списки.

Каков наилучший способ создания запроса с использованием помощника по кодированию и привязки и т. Д.?

Например, приведенный ниже запрос даст мне все с author_id = 1. Что делать, если фильтры, например, микс;author_id = 1;language = 'all' (не помещать условие where в язык) и год публикации = 'all' также не ставить выражение where .. Нужно ли вручную проверять значения и код или есть вспомогательный метод codigniter, который позволяетфильтр, который будет удален из условия where, если в раскрывающемся списке указано «показать все»?

$sql = "select * from AUTHORs a , BOOKS b where 
        a.AUTH_ID = b.BOOK_AUTH_ID 
        and b.BOOK_AUTH_ID = ? 
        and b.BOOK_LANGUAGE = ?
        and b.PUB_YEAR = ? ";

$query =  $this->db->query($sql, array ($author_id, $book_lang, $pub_year));

1 Ответ

3 голосов
/ 18 сентября 2011

Вы должны использовать класс Active Record Codeigniter для построения вашего запроса:

$this->db->select('*');
$this->db->from('AUTHORs a , BOOKS b');
$this->db->where('a.AUTH_ID', 'b.BOOK_AUTH_ID');

if ($author_id != 'all') $this->db->where('b.BOOK_AUTH_ID', $author_id);
if ($book_lang != 'all') $this->db->where('b.BOOK_LANGUAGE', $book_lang);
if ($pub_year != 'all') $this->db->where('b.PUB_YEAR', $pub_year);

$query = $this->db->get();

Чтобы узнать больше о классе активной записи Codeigniter, посетите Документы:
http://codeigniter.com/user_guide/database/active_record.html

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...