如果用户存在于另一个表中,则获取表的记录

时间:2014-01-29 16:45:11

标签: php mysql sql codeigniter activerecord

我在我的模型中使用此codeigniter活动记录查询,以获得点数最多的用户表中的前10位用户。

$this->db->order_by('points', 'desc'); 
        $q=$this->db->get('user', 10);
        $data = $q->result_array();
        return $data;

这样可以正常工作,并返回点数最多的前10位用户的信息。 pointsuser表格中的一列。

但是,我一直试图让排名前10的用户同时存在于另一个表entries中。

在条目表中,user_id og用户进行输入时存储当前用户。

我想让那些已经入狱的用户获得最高分。所以我想改变上面的查询,以返回10个用户,这些用户位于entries表中。{/ p>

User Table:

id, name, points

Entries Table:

id, time_entered, image, user_id

我该怎么做?

我尝试了一个连接,它只返回了点数最多的单个用户。

2 个答案:

答案 0 :(得分:1)

希望您的条目表具有user_id作为外键。

所以你的代码应该是:

$this->db->select("user.*,entries.*");
$this->db->from("user");
$this->db->join("entries","user.id = entries.user_id");
$this->db->order_by('user.points', 'desc'); 
$this->db->limit(10);   
$q = $this->db->get();    
$data = $q->result_array();
return $data;

答案 1 :(得分:0)

我不熟悉CI,但我会尝试提供MySQL查询,

SELECT * from user AS u 
    WHERE u.id IN (
        SELECT e.user_id from entries AS e
    )
    ORDER BY points DESC LIMIT 10

只需将其转换为CI AR查询即可。我认为CI有一些方法可以设置AR查询的condition。如果有该选项,您只需将条件设置为IN即可确定条目表中是否存在u.id