Codeigniter join повторяет возвращенные значения - PullRequest
1 голос
/ 17 марта 2012

Хорошо, сначала извините, если это глупый вопрос, но я действительно большой новичок.

У меня есть 3 таблицы базы данных, видео, события и пользователи.

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

Например, если я повторяю имя пользователя в моем профиле и загрузил 7 видео, оно показывает имя семь раз.

function get_profile($id) 
    {
        $this->db->select('*');
        $this->db->from('pf_users');
        $this->db->join('pf_videos', 'pf_videos.uid = pf_users.uid');
        $this->db->join('pf_events', 'pf_events.uid = pf_users.uid');
        $this->db->where('pf_users.uid', $id);
        $q = $this->db->get();
        if($q->num_rows() > 0)
        {
            foreach($q->result() as $row)
            {
                $data[] = $row;
            }

            return $data;
        }   
            else 
        {
            show_404();
        }

}

я даже повторяю меню

<ul class="profile_menu">
        <?php foreach ($results as $res): ?>
            <li><a href="#" class="profile_info">Információ</a></li>
            <li><a href="#" class="profile_event">Eseményei (<?php echo count($res->title) ?>)</a></li>
            <li><a href="#" class="profile_photos">Party képei (0)</a></li>
            <li><a href="#" class="profile_video">Videói (<?php echo count($res->url); ?></a></li>
        <?php endforeach; ?>

Может кто-нибудь указать, что мне не хватает? и извините, если это глупый вопрос.

спасибо

1 Ответ

2 голосов
/ 17 марта 2012

Это нормально, что у вас будет дублированный контент, так как вы пропускаете групповое утверждение.В вашей ситуации вам нужно добавить:

$this->db->group_by("pf_users.uid");

Теперь у вас есть совместные pf_videos и pf_events, и обычно нужно иметь дублированный контент, поскольку у вас есть и информация о pf_events и pf_videos.Если вам не нужны обе эти данные, простой DISTINCT сделает эту работу за вас, поэтому вы можете просто получить

 $this->db->select('DISTINCT pf_users.*',false);

без использования оператора group_by.Чтобы узнать больше о DISTINCT и GROUP BY, вы можете просто прочитать следующие ссылки:

http://dev.mysql.com/doc/refman/5.0/en/distinct-optimization.html

http://dev.mysql.com/doc/refman/5.0/en/group-by-functions.html

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