我在我的模型中使用此codeigniter活动记录查询,以获得点数最多的用户表中的前10位用户。
$this->db->order_by('points', 'desc');
$q=$this->db->get('user', 10);
$data = $q->result_array();
return $data;
这样可以正常工作,并返回点数最多的前10位用户的信息。 points
是user
表格中的一列。
但是,我一直试图让排名前10的用户同时存在于另一个表entries
中。
在条目表中,user_id og用户进行输入时存储当前用户。
我想让那些已经入狱的用户获得最高分。所以我想改变上面的查询,以返回10个用户,这些用户位于entries
表中。{/ p>
User Table:
id, name, points
Entries Table:
id, time_entered, image, user_id
我该怎么做?
我尝试了一个连接,它只返回了点数最多的单个用户。
答案 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
。