Codeigniter连接重复返回的值

时间:2012-03-17 08:29:31

标签: database codeigniter join

好的,首先对不起,如果它是一个愚蠢的问题,但我是一个非常大的初学者。

我有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 个答案:

答案 0 :(得分:2)

由于您缺少group by语句,因此您将拥有重复的内容是正常的。在您的情况下,您需要添加:

$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