Как получить уникальные строки с помощью объединения из одной таблицы? - PullRequest
1 голос
/ 01 февраля 2012

Я использую codeigniter 2 в своем проекте, и у меня есть проблема, которая, надеюсь, поможет вам в ее решении.

У меня есть две таблицы mysql: " авторы " и " статьи ", где отношение "один автор ко многим статьям". Мне нужно получить авторов "от ' авторов ", которые уже имеют активные статьи в " статьях ".

примечание , что в таблице статей у меня есть столбец с именем "status_id", который устанавливается в 1, если статья активна, или в 0, если приостановлено. и у меня в таблице " авторы " есть запись "hors_categories_id ".

Я пытался сделать это с помощью этого кода

$this->db->select('authors.name,authors.about,authors.author_thumbnail,authors.authors_categories_id,authors.user_id,authors.status_id,authors.id AS auth_id')
                  ->from('authors')
                  ->join('articles', 'authors.id = articles.author_id')
                  ->where('authors.authors_categories_id',$AuthCategory)
                  ->where('articles.status_id', 1)
                  ->order_by("auth_id", "desc")
                  ->limit($limit, $start);
            $Res = $this->db->get();
            $data['Authors'] = array();
            foreach($Res->result() as $R)
            {
                $data['Authors'][] = $R;
            }
            print_r($data['Authors']);

Моя проблема в том, что код приводит меня к дублированию авторов. например , если у автора есть 5 статей в таблице 'статей', результат будет 5 записей для одного автора, а мне нужно просмотреть каждого автора только один раз, а не более .

Мне нужен код для генерации записей по количеству авторов, а не статей.

спасибо.

Ответы [ 2 ]

4 голосов
/ 01 февраля 2012

добавьте DISTINCT в ваш запрос.

select('authors.name,authors.about,authors.author_thumbnail,authors.authors_categories_id,authors.user_id,authors.status_id,authors.id AS auth_id')
              ->from('authors')
              ->join('articles', 'authors.id = articles.author_id')
              ->where('authors.authors_categories_id',$AuthCategory)
              ->where('articles.status_id', 1)
              ->group_by('authors.name');
              ->order_by("auth_id", "desc")
1 голос
/ 01 февраля 2012
$this->db->select('authors.name,authors.about,authors.author_thumbnail,authors.authors_categories_id,authors.user_id,authors.status_id,authors.id AS auth_id')
                  ->from('authors')
                  ->join('articles', 'authors.id = articles.author_id')
                  ->where('authors.authors_categories_id',$AuthCategory)
                  ->where('articles.status_id', 1)
                  ->group_by('authors.id')
                  ->order_by("auth_id", "desc")
                  ->limit($limit, $start);
            $Res = $this->db->get();
            $data['Authors'] = array();
            foreach($Res->result() as $R)
            {
                $data['Authors'][] = $R;
            }
            print_r($data['Authors']);

Обратите внимание на ->group_by('authors.id') в коде сейчас.Это должно сгруппировать всех одинаковых авторов вместе.

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