【问题标题】:Get records of table if user exists in another table如果用户存在于另一个表中,则获取表的记录
【发布时间】:2014-02-21 14:55:15
【问题描述】:

我在我的模型中使用这个 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。

我想让已经进入的用户获得顶部。所以我想改变上面的查询,返回entries表中得分最多的10个用户。

User Table:

id, name, points

Entries Table:

id, time_entered, image, user_id

我该怎么做?

我尝试加入,它只返回了得分最高的单个用户。

【问题讨论】:

  • 你的user 表和entries 表是什么样子的?
  • @Jhn 请看上面的编辑

标签: php mysql sql codeigniter activerecord


【解决方案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;

【讨论】:

    【解决方案2】:

    我不熟悉 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 Query。我认为 CI 有一些方法可以设置 AR 查询的condition。如果有该选项,您只需将条件设置为IN 即可确定您的条目表中是否存在u.id。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-05-11
      • 1970-01-01
      • 2019-12-03
      • 1970-01-01
      • 1970-01-01
      • 2019-12-30
      • 1970-01-01
      • 2014-01-31
      相关资源
      最近更新 更多