The query (models)
function get_data_complex($select = NULL, $table = NULL, $limit = NULL, $like = NULL, $order = NULL, $join = NULL, $where = NULL, $where2 = NULL, $group_by = NULL, $orderby = null, $distinct = null)
{
$this->db->select($select);
$this->db->from($table);
if ($join) {
for ($i = 0; $i < sizeof($join['data']); $i++) {
$this->db->join($join['data'][$i]['table'], $join['data'][$i]['join'], $join['data'][$i]['type']);
}
}
if ($where) {
for ($i = 0; $i < sizeof($where['data']); $i++) {
$this->db->where($where['data'][$i]['column'], $where['data'][$i]['param']);
}
}
if ($where2) {
$this->db->group_start();
for ($i = 0; $i < sizeof($where2['data']); $i++) {
$this->db->or_where($where2['data'][$i]['column'], $where2['data'][$i]['param']);
}
$this->db->group_end();
}
if ($like) {
$this->db->group_start();
foreach (explode(',', $like['data'][0]['column']) as $i => $value) {
if ($i == 0) $this->db->like($value, $like['data'][0]['param'], 'BOTH');
else $this->db->or_like($value, $like['data'][0]['param'], 'BOTH');
}
$this->db->group_end();
}
if ($limit) {
$this->db->limit($limit['finish'], $limit['start']);
}
if ($order) {
for ($i = 0; $i < sizeof($order['data']); $i++) {
$this->db->order_by($order['data'][$i]['column'], $order['data'][$i]['type']);
}
}
if ($group_by) {
$this->db->group_by($group_by);
}
if ($orderby) {
$this->db->order_by($orderby);
}
if ($distinct) {
$this->db->distinct();
}
$query = $this->db->get();
return $query;
}