Codeigniter – активная запись – sql – комплексное соединение

У меня есть функция, которая извлекает все теги из таблицы:

function global_popular_tags() { $this->db->select('tags.*, COUNT(tags.id) AS count'); $this->db->from('tags'); $this->db->join('tags_to_work', 'tags.id = tags_to_work.tag_id'); $this->db->group_by('tags.id'); $this->db->order_by('count', 'desc'); $query = $this->db->get()->result_array(); return $query; } 

У меня есть другая таблица под названием «работа». В таблице «work» есть столбец «draft» со значениями 1 или 0. Я хочу, чтобы COUNT (tags.id) учитывал, работает ли работа с определенным тегом в режиме черновика (1) или нет.

Скажем, есть 10 работ, отмеченных, например, «дизайном». COUNT будет 10. Но 2 из этих работ работают в режиме черновика, поэтому COUNT действительно должен быть 8. Как мне это сделать?

Попробуйте изменить:

 $this->db->from('tags'); $this->db->join('tags_to_work', 'tags.id = tags_to_work.tag_id'); 

Для того, чтобы:

 $this->db->from('tags, work'); $this->db->join('tags_to_work', 'tags.id=tags_to_work.tag_id AND work.id=tags_to_work.work_id'); 

И добавление:

 $this->db->where('work.drafts', 0); 

Вы можете использовать чистый sql вместо использования активного класса записи, я сам работаю с CI более 2 лет, и большую часть времени я избегаю активного класса записи, потому что прямой sql намного проще отлаживать и писать сложные запросы. Вот как я буду использовать его.

 $ sql = "SELECT ... your sql here";
 $ q = $ this-> db-> query ($ sql);
 ...
 // Делаем что-то с вашим запросом здесь