У меня есть функция, которая извлекает все теги из таблицы:
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); ... // Делаем что-то с вашим запросом здесь